Есть ли способ обнаружить кодировку строки на PHP без добавления расширения mbstring? Я знаю, что это можно сделать с помощью mb_detect_encoding()
, но есть ли эквивалентная, не-многобайтовая функция?
Если нет, что бы потребовалось для реализации функции detect_encoding()
, которая, по крайней мере, обнаружила бы UTF-8?
Строки в PHP - это просто байтовые последовательности, они не содержат никакой информации о кодировании. mb_detect_encoding
фактически не обнаруживает строковое кодирование, он пытается получить mb_detect_encoding
предположение, запустив последовательность байтов с помощью ряда функций идентификации, по одному на кодировку (по умолчанию, заданные mb_detect_order
), и возвращает первый, в котором последовательность Матчи. Эти функции очень просты и даже не существуют для многих популярных кодировок.
Нет способа, с расширением mbstring или без него, установить кодировку строки - только для того, чтобы, возможно, вывести некоторые правила, что вы могли бы сделать, только если строка содержит байтовые последовательности, которые были бы недопустимы в этих конкретных кодировках.
Вы никогда не узнаете, должен ли "\xC2\xA4"
быть UTF-8 ¤
или ISO-8859-1 ¤
просто посмотрев на него, потому что они являются точно такими же байтами.
Для получения дополнительной информации см.: Абсолютный минимум. Каждый разработчик программного обеспечения абсолютно уверен, должен знать о юникодном и символьном наборах
Всегда есть значок, который обычно включен в 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>