2016-01-23 2 views
0

У меня проблема с подстрокой. Когда специальный символ является последним символом результирующей подстроки (и только тогда !!!), эти символы отображаются в виде значка с вопросительным знаком в нем.PHP: Специальный символ становится значком знака вопроса в подстроке

вот мой код:

$string = 'This is a string and when a German word with a special char like "Tür" appears and the special char ü is the last character of the substring it gets represented as an icon with question mark'; 
echo substr($string,0,102). "..."; 

Результат:

Это строка и когда немецкое слово с особым полукокса, как «TUR» появляется и особый полукокса ..

Как этого избежать?

+0

Используйте 'mb_substr' – Rein

ответ

0

Похоже, вы используете 8-битные строковые функции для обработки символов Юникода. Это не сработает.

Вам необходимо установить пакет mbstring и включить функцию «перегрузка функции mbstring» в вашей конфигурации php. Это позаботится о том, чтобы молча отключить все соответствующие функции обработки строк, чтобы вместо этого использовать их эквиваленты с несколькими байтами, так что вам не нужно менять код.

Существует множество вариантов конфигурации для этого расширения «mbstring». Проверьте свой файл конфигурации php.ini и просмотрите их. Вы найдете команду mbstring.func_overload, которую вы, вероятно, хотите установить на значение 7, так что все такие функции переопределены. После изменения этой конфигурации вам необходимо перезапустить процесс http-сервера, чтобы новая конфигурация загружалась. Вы также можете проверить это, используя знаменитую функцию phpinfo() в тестовом скрипте.

Альтернативой было бы не настраивать эту переопределяющую автоматику, а вручную переносить свой код для непосредственного использования этих функций. Для этого вам нужно будет заменить все вызовы строки функции в вашем коде эквивалентными именами функций. Так, например, mb_substr(...) вместо substr(...).

Также вы действительно хотите начать чтение документации по используемым инструментам. Здесь представляет интерес введение в функции «многобайтовые строки». Это должно помочь вам понять, что все это значит и что вам нужно позаботиться: http://php.net/manual/en/book.mbstring.php

0

Вы должны использовать функцию mb_substr.

 Смежные вопросы

  • Нет связанных вопросов^_^