Кодирование строки как UTF-8 с спецификацией в PHP - PullRequest
22 голосов
/ 09 апреля 2011

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

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

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

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

1 Ответ

61 голосов
/ 09 апреля 2011

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

UTF-8 BOM представляется 0xEF 0xBB 0xBF, поэтому вы можете прикрепить ее к вашей строке после преобразования в 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 или того, что он был преобразован из другого формата, имеющего спецификацию.

Для начала вам, возможно, не нужно беспокоиться о танце в танке спецификации.

...