Использование substr () на нескольких языках, включая арабский язык с php - PullRequest
5 голосов
/ 25 июня 2011

Я знаю, что в php уже опубликовано много вопросов на арабском языке, но я не смог найти решение своей проблемы, и поэтому я отправляю этот вопрос:

У меня есть сайт PhP, который отлично работает на английском языке. Теперь я хочу, чтобы он поддерживал несколько языков, включая французский, испанский, арабский, но я не могу использовать их с одним кодом. Проблема в том, что я использовал substr () во многих местах, и переведенные символы не работают должным образом с substr (). Я также пытался с mb_substsr (), но бесполезно: (

Поле в БД: "utf8_general_ci", и я уже разместил заголовок ('Content-type: text / html; charset = UTF-8'); в моем коде, чтобы разрешить рендеринг в UTF-8.

Проблема либо в том, что я получаю "?????" вместо точных слов или я получаю неправильные слова с помощью substr ()

Пожалуйста, помогите !!

Ответы [ 3 ]

15 голосов
/ 01 февраля 2012

Для арабского слова: я хочу получить символ только в позиции 2.

$name = "MYNAME";
$Char = substr($Name,2,2);
echo $Char; // print N this okay.

Но для арабской работы, такой как كامل, возвращается знак вопроса

case 1: $Char = substr($Name,0,1);     // Not Work and return question mark
case 2: $Char = substr($Name,1,1);     // Not Work and return question mark
case 3: $Char = substr($Name,0*2,1*2); // Work and return "ك"
case 3: $Char = substr($Name,1*2,1*2); // Work and return "ا"

Так что янайти решение:

$Char = mb_substr($Name,1,1,'utf-8');  // Work and return "ا".
4 голосов
/ 25 июня 2011

Прежде всего, забудьте substr.Если вы собираетесь кодировать свои строки в UTF-8 и разбивать их на части, то mb_substr является единственным рабочим решением.

Также необходимо убедиться, что кодировка соединения MySql также UTF-8.Сделайте это, позвонив

mysql_set_charset('utf8');

сразу после mysql_connect.Существуют эквивалентные способы сделать это, если вы используете уровень доступа к данным, отличный от расширения mysql (например, PDO).

0 голосов
/ 25 июня 2011
  1. Проверьте, используете ли вы другие многобайтовые (mb_ *) функции для работы с вашими данными.
  2. Проверьте, сохраняются ли ваши сценарии в виде текстовых файлов UTF-8.
  3. Проверьте, отправляете ли вы запрос SET NAMES utf8 в базу данных сразу после подключения к ней.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...