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

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

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

1

Решение

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

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

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

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

3

Другие решения

Всегда есть Iconv, который обычно включен в 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

По вопросам рекламы [email protected]