Символы UTF-8 отображаются неправильно - PullRequest
10 голосов
/ 20 апреля 2011

Это мой код PHP:

<?php
$result = '';
$str = 'Тугайный соловей';
for ($y=0; $y < strlen($str); $y++) {
    $tmp = mb_substr($str, $y, 1);
    $result = $result . $tmp;
}
echo 'result = ' . $result;

Вывод:

Тугайный Ñоловей

Что я могу сделать?Я должен положить $result в базу данных MySQL.

Ответы [ 4 ]

15 голосов
/ 20 апреля 2011

Какая кодировка вашего файла? Это тоже должно быть UTF8. Какая кодировка по умолчанию вашего http-сервера? Это должен быть и UTF-8.

Кодирование работает, только если:

  • файл закодирован правильно
  • сервер сообщает кодировку доставленного файла.

При работе с базами данных вам также необходимо установить правильную кодировку для полей БД и , как клиент MySQL взаимодействует с сервером (см. mysql_set_charset()). Только полей недостаточно, потому что ваш клиент MySQL (в данном случае PHP) может быть установлен в ISO по умолчанию и интерпретирует данные. Таким образом, вы получите UTF8 DB -> ISO client -> внедренный в UTF8 PHP скрипт. Не удивительно, почему в конце все испорчено: -)

Как обслуживать файл с нужной кодировкой?

header('Content-type: text/html; charset=utf-8') это одно решение

.htaccess файл, содержащий AddDefaultCharset UTF-8 - это еще один

HTML-тип содержимого мета также может работать, но всегда лучше отправлять эту информацию, используя заголовки HTTP.

PS: вы также должны использовать mb_strlen(), потому что strlen() в строках UTF8, вероятно, сообщит больше, чем реальная длина.

3 голосов
/ 20 апреля 2011

Полагаю, ваш код в windiws-1251, так как он русский :) преобразовать вашу строку в utf-8:

$str = iconv('windows-1251', 'utf-8', $str);
2 голосов
/ 20 апреля 2011

Если вы собираетесь отправить набор данных и не хотите указывать utf-8 с помощью заголовка php, вы можете добавить этот html на свою страницу:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
1 голос
/ 20 апреля 2011

Если ваша база данных UTF-8, это нормально для mysql.

Для вашего эха, если вы делаете это на веб-сайте, поместите это на верхнюю страницу:

header('Content-Type: text/html; charset=UTF-8');
...