Кодирование строки как UTF-8 со спецификацией в PHP

как я могу заставить PHP добавить спецификацию при использовании utf8_encode?

Вот что я пытаюсь сделать:

$zip->addFromString($filename, utf8_encode($xml));

К сожалению (для меня), результат не будет иметь отметки BOM в начале.


person Jeano    schedule 08.04.2011    source источник


Ответы (1)


Вы сами пробовали добавить?

спецификация UTF-8 кажется 0xEF 0xBB 0xBF, поэтому вы можете прикрепить ее к своей строке < em>после преобразования в UTF-8.

$utf8_with_bom = chr(239) . chr(187) . chr(191) . $utf8_string;

Однако будьте осторожны. utf8_encode требуется строка ISO-8859-1. Если вы работаете с XML, убедитесь, что XML не уже в кодировке UTF-8. Комментарии к документации говорят о том, что функция ломается по-разному, так что не стоит разбрасываться ею, если вы знаете, что она вам нужна.

Помните, что строки PHP — это просто тупые, неизвестные байты. К ним не привязан набор символов, поэтому, если данные в строке уже имеют кодировку UTF-8, вам не нужно запускать преобразование.

Кроме того, в связанной статье Википедии говорится следующее:

Хотя стандарт Unicode допускает спецификацию в UTF-8, не требует и не рекомендует это. Порядок байтов не имеет значения в UTF-8, поэтому спецификация служит только для идентификации текстового потока или файла как UTF-8 или того, что он был преобразован из другого формата, имеющего спецификацию.

Вам, вероятно, не нужно беспокоиться о чечетке BOM для начала.

person Charles    schedule 09.04.2011
comment
У меня была проблема, когда Excel не мог правильно открыть мой CSV UTF-8 без спецификации, поэтому это может не потребоваться, но это, безусловно, может иметь значение. - person OrganicPanda; 05.07.2013
comment
Вы можете сделать число менее волшебным, выполнив chr(0xEF).chr(0xBB).chr(0xBF) - таким образом вы сможете увидеть, что оно шестнадцатеричное, и оттуда лучше понять, что это спецификация. - person Niet the Dark Absol; 18.07.2014
comment
Если вы используете какой-то старый редактор, например. EditPlus, затем функция «найти в файле» может искать и распознавать только файлы с иностранными символами, закодированными в utf8+bom. - person Scott Chu; 19.04.2016
comment
Имейте в виду, что для работы файла .CSV в Excel для Mac спецификация UTF8 и кодировка не будут работать — вам нужно преобразовать данные в UTF16-LE и добавить спецификацию UTF16-LE — stackoverflow.com/a/16766198/324220 - person Luka Ramishvili; 30.03.2017
comment
Я обещаю тебе моего первенца. Спасибо. - person Kenny Wyland; 03.08.2018