2011-06-25 3 views
4

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

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

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

проблемы либо я получаю «?????» вместо точных слов или я получаю неправильные слова подстроки()

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

ответ

12

Для арабского слова: Я хочу получить символ только в позиции 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 "ا". 
+0

вместо этого добавьте комментарий к существующему вопросу – Nitesh

+0

Этот код отлично подходит для меня как для английского, так и для арабского: ' ' Надеюсь, это сработает и для вас. –

+0

ваше решение работает как шарм :) +1 – k0sh

4

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

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

mysql_set_charset('utf8'); 

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

+0

Не забудьте 'mb_internal_encoding ("UTF-8") ; 'и для PDO вы можете использовать это:' $ dbh = new PDO ($ dsn, $ user, $ password, array (PDO :: MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); ' – Manhim

+0

Я уже пробовал использовать mb_. . но не использовать :( – Nitesh

+0

Нужно ли кодировать после подключения. Обязательно? – Nitesh

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

Не достал вас по поводу деталя 2..pls объясните – Nitesh

+0

Ну, Это важно для работы с данными из базы данных, но это избавляет вас от многих головных болей, если вы пишете некоторые из этих специальных символов непосредственно в исходный код. Просто зайдите все-UTF-8-in, и вам не придется решать какие-либо из этих проблем :) –

+0

Я уже настроен на utf8-encode и работает на одном и том же, но все равно получаю ошибки. – Nitesh

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