Как извлечь строку UTF-8 (на арабском языке) из базы данных MySQL и вывести экран на экран с помощью PHP - PullRequest
0 голосов
/ 26 июля 2010

У меня есть база данных MySQL, я установил collation = utf8_unicode_ci.

Я пытаюсь получить значение через PHP, но получаю "???"вместо фактической строки.

Я читал об этой теме и пытался использовать mb_convert_encoding, но это не сработало, чего мне не хватает?

Может кто-нибудь опубликовать фрагмент кода, который фактически вытягиваетзначение из БД и выводит строку на экран?

Спасибо,

1 Ответ

0 голосов
/ 26 июля 2010

У меня есть база данных MySQL, я установил collation = utf8_unicode_ci.

Я пытаюсь получить значение через PHP, но получаю "???" вместо фактической строки.

Наборы символов - это как символы кодируются .

Сортировки - это как символы сортируются .

Это разные вещи. Скорее всего, ваши таблицы или столбцы имеют правильное сопоставление, но неправильный набор символов. В разделе Интернационализация руководства MySQL содержится много информации о том, как правильно все настроить.

Может кто-нибудь опубликовать фрагмент кода, который фактически извлекает значение из БД и выводит строку на экран?

Давайте продемонстрируем, как использовать utf8 в качестве набора символов, и сопоставление utf8 «без учета регистра». Я использую PDO в этом примере, но та же общая идея должна работать и с mysqli. Я бы не советовал использовать старое расширение mysql.

// Let's tell MySQL we're going to be working with utf8 data.
// http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html
$db->query("SET NAMES 'utf8'");
// Create a table with our proper charset and collation.
// If we needed to, we could specify the charset and collation with
// each column. 
// http://dev.mysql.com/doc/refman/5.1/en/charset-column.html
// We could also set the defaults at the database level.
// http://dev.mysql.com/doc/refman/5.1/en/charset-database.html
$db->query('
    CREATE TABLE foo(
        bar TEXT
    ) 
    DEFAULT CHARACTER SET utf8
    DEFAULT COLLATE utf8_general_ci
    ENGINE=InnoDB
');

// I don't know Arabic, so I'll type this in English.  It should
// work fine in Arabic, as long as the string is encoded as utf8.    
$sth = $db->prepare("INSERT INTO foo(bar) VALUES(?)");
$sth->execute(array("Hello, world!"));

$sth = $db->query("SELECT bar FROM foo LIMIT 1");
$row = $sth->fetch(PDO::FETCH_NUM);
echo $row[0]; // Will echo "Hello, world!", or whatever you inserted.

@ Комментарий Томпа ниже верен. Убедитесь, что вы используете правильный набор символов с заголовком вашего типа контента. Например:

header('Content-type: text/html; charset=utf-8'); // Note the dash!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...