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