Обнаружить кодировку в PHP без многобайтового расширения?

1

Есть ли способ обнаружить кодировку строки на PHP без добавления расширения mbstring? Я знаю, что это можно сделать с помощью mb_detect_encoding(), но есть ли эквивалентная, не-многобайтовая функция?

Если нет, что бы потребовалось для реализации функции detect_encoding(), которая, по крайней мере, обнаружила бы UTF-8?

  • 0
    определить кодировку не так просто. простой файл ascii, который использует только 0-127 символов, также является совершенно допустимым файлом utf-8, но вы не можете сказать, что он был создан с использованием utf или старой школы ascii, потому что они неразличимы. Вы могли бы сделать что-то вроде поиска спецификации, но не во всех файлах это есть.
Теги:
utf-8
encoding
multibyte

2 ответа

3
Лучший ответ

Строки в PHP - это просто байтовые последовательности, они не содержат никакой информации о кодировании. mb_detect_encoding фактически не обнаруживает строковое кодирование, он пытается получить mb_detect_encoding предположение, запустив последовательность байтов с помощью ряда функций идентификации, по одному на кодировку (по умолчанию, заданные mb_detect_order), и возвращает первый, в котором последовательность Матчи. Эти функции очень просты и даже не существуют для многих популярных кодировок.

Нет способа, с расширением mbstring или без него, установить кодировку строки - только для того, чтобы, возможно, вывести некоторые правила, что вы могли бы сделать, только если строка содержит байтовые последовательности, которые были бы недопустимы в этих конкретных кодировках.

Вы никогда не узнаете, должен ли "\xC2\xA4" быть UTF-8 ¤ или ISO-8859-1 ¤ просто посмотрев на него, потому что они являются точно такими же байтами.

Для получения дополнительной информации см.: Абсолютный минимум. Каждый разработчик программного обеспечения абсолютно уверен, должен знать о юникодном и символьном наборах

  • 0
    спасибо за эту информацию. К последней части моего вопроса с вашей логикой, должно быть возможно обнаружить, что строка не является utf8, правильно? как это будет выглядеть?
0

Всегда есть значок, который обычно включен в PHP по умолчанию

<pre>
<?php
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "ISO-8859-1");
var_dump(iconv_get_encoding('all'));
?>
</pre>
  • 0
    я определенно не знал об этих методах, но мне нужен способ специально проверить строку

Ещё вопросы

Сообщество Overcoder
Наверх
Меню