Вы сами пытались добавить один?
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 или того, что он был преобразован из другого формата, имеющего спецификацию.
Для начала вам, возможно, не нужно беспокоиться о танце в танке спецификации.