У меня есть набор данных внутри базы данных, который был введен с символами Unicode, но они были интерпретированы как строка. То есть там, где должен быть апостроф ’
У меня на самом деле есть \u2019
Так что теперь мне нужно преобразовать это в его символьное представление, которое ’
. Во-первых, довольно просто изменить строку на версию объекта: ’
, затем мне нужно превратить ее в правильную многобайтовую строку UTF-8.
Я пытался сделать это несколькими способами; на моем локальном сервере я могу извлечь символы с помощью функции preg_match, а затем передать каждый из них следующей функции:
mb_convert_encoding($string, "UTF-8", "HTML-ENTITIES");
Звучит вполне разумно и работает без проблем. Отключение кодировки UTF-8 в браузере показывает, что оно фактически преобразуется в ’
при чтении в кодировке браузера по умолчанию.
Тем не менее, точно такой же код при запуске в моей производственной среде выдает страшное поле «отсутствующий символ» при визуализации как UTF-8. Выключив UTF-8, вы получите поток байтов, который будет отображаться как ò°‘£
. Похоже, что он выводит 4 байта, а не 3, я не знаю, насколько это актуально, так как я плохо разбираюсь в кодировке символов.
Я предполагаю, что проблема связана с моими настройками mbstring. Вот настройки mbstring с моего локального сервера:
Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation disabled
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 4.7.1
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input auto auto
mbstring.http_output UTF-8 UTF-8
mbstring.http_output_conv_mimetypes ^(text/|application/xhtml\+xml)^(text/|application/xhtml\+xml)
mbstring.internal_encoding UTF-8 UTF-8
mbstring.language neutral neutral
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value
В производственной среде есть несколько отличий:
Multibyte Support enabled
Multibyte string engine libmbfl
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 3.7.1
mbstring.detect_order no value no value
mbstring.encoding_translation Off Off
mbstring.func_overload 0 0
mbstring.http_input auto auto
mbstring.http_output UTF-8 UTF-8
mbstring.internal_encoding UTF-8 UTF-8
mbstring.language neutral neutral
mbstring.strict_detection Off Off
mbstring.substitute_character no value no value
Кто-нибудь видит, что я делаю не так?