У меня есть приложение, которое до сих пор было только на английском языке. Кодировка содержимого во всех шаблонах и базе данных была UTF-8. Теперь я ищу интернационализацию / перевод приложения на языки, которые имеют наборы символов, абсолютно необходимые для UTF-8.
В приложении используются различные строковые функции PHP, такие как strlen()
, strpos()
, substr()
и т. Д., И я понимаю, что я должен переключать их для многобайтовых строковых функций, таких как mb_strlen()
, mb_strlen()
, mb_substr()
и т. д. для правильной обработки многобайтовых символов. Я попытался немного почитать эту тему, но практически все, что я могу найти, углубляется в «теорию кодирования» и не дает простого ответа на вопрос: если я использую UTF-8 всюду, могу ли я переключиться с используя strlen()
в mb_strlen()
и ожидайте, что все будет нормально работать, например, на английском и арабском языках, или есть что-то еще, что мне еще нужно искать?
Любое понимание будет приветствоваться, и извинения, если я оскорбляю кого-то, у кого есть кодировка близко к сердцу с моим относительным невежеством.
Нет. Так как bytearrays также являются строками в PHP, простая замена 8-битных строковых функций с помощью их mb_ * -матричек не вызовет ничего, кроме неприятностей. Функции, такие как strlen () и substr (), чаще всего используются с байтами, чем фактические текстовые строки.
На том месте, где я работал в последнее время, нам удалось создать многоязычный веб-сайт (арабский, хинди, среди других языков) на PHP без использования библиотеки mbstring. Обработка текстовой строки на самом деле происходит не так часто. Когда это произойдет, это потребует гораздо большей осторожности, чем просто изменение имени функции. Большинство проблем, которые я обнаружил, лежат на стороне HTML. Получение макета страницы для работы с языком RTL – это нетривиальная часть.
Я не знаю, используете ли вы просто арабский пример. Трудность интернационализации может существенно варьироваться в зависимости от того, означает ли «международный» только европейские языки (плюс русский), или если он включает языки Ближнего Востока, Южной Азии и Дальнего Востока.
Проверьте статус флага mbstring.func_overload в php.ini
Если (ini_get ('mbstring.func_overload') & 2), то функции, такие как strlen () (как указано здесь ), уже перегружены функцией mb_strlen (), поэтому вам не нужно явно вызывать функции mb_ *.
Количество требуемых многобайтовых функций составляет менее 10, поэтому создайте 3 или 5 вопросов, хорошо ли использование функции или логики. Этот quesiton является неуверенным и трудно ответить. Маленькие вопросы могут получить быстрые ответы. Конкретные вопросы могут дать хорошие ответы. сообщите мне, когда вы создадите другие вопросы.
Если вам нужны варианты использования, см. Резервные функции в CMS, такие как WordPress , MediaWiki , Drupal .
Когда вы решите начать использовать mbstring, вам следует избегать использования директивы mbstring.func_overload. Сторонники Mbstring собираются обесценить mbstring.func_overload в PHP 5.5 или 5.6 (см. Список рассылки HP HP в 2012 году). mbstring.func_overload разбивает кодовые базы, которые не должны использовать mbstring.func_overload. вы можете видеть случаи в CakePHP, Zend Framework 1x, для вычисления Content-Length с помощью strlen () .
Я отвечаю на аналогичный вопрос в другом месте: Должен ли я реорганизовать все свои рамки для использования функций mbstring?