Проблемы с кодировкой символов в приложении LAMP - UTF-8 или нет? - PullRequest
2 голосов
/ 26 ноября 2009

Я все еще изучаю веревки с помощью PHP и MySQL, и я знаю, что я делаю что-то не так с настройками наборов символов, но не могу понять, прочитав здесь и в Интернете, что мне следует делать .

У меня есть стандартная установка LAMP с PHP 5, MySQL 5. Я установил все по умолчанию. Когда некоторые из моих пользователей вводят комментарии в нашу базу данных, некоторые символы отображаются некорректно - в основном апострофы и черточки в настоящий момент. В MySQL апострострофы отображаются как… Так же они отображаются на странице (я использую htmlentities для вывода комментариев пользователей).

В phpMyAdmin написано, что мой MySQL Charset - это UTF8-Unicode.

В моей базе данных все мои таблицы настроены по умолчанию Latin1-Swedish-ci.

У всех моих веб-страниц есть мета http-экв = "Тип контента" content = "text / html; charset = utf-8"

Когда я просматриваю заголовки http сайта, я вижу: Content-Type: text / html

Как новичок, я вообще не рассматривал наборы символов, пока на некоторых моих страницах не стало странно. Так имеет ли смысл для меня все конвертировать в utf-8 и повлияет ли это на мой PHP-код? Или я должен попытаться получить все это на латыни? И нужно ли мне заходить в базу данных и заменять эти нечетные коды, или они будут волшебным образом отображаться после правильной настройки кодировок? Все, что я делал до сих пор, не помогло (я установил заголовки http на utf-8, а также попробовал латиницу).

Ответы [ 4 ]

2 голосов
/ 26 ноября 2009

Если вы действительно хотите понять эти проблемы, я бы начал с чтения этой статьи на mysql.com . По сути, вы хотите, чтобы каждая часть головоломки ожидала кодировки UTF-8. На стороне PHP вы хотите сделать что-то вроде:

<?php header("Content-type: text/html; charset=utf-8");?>
<html>
  <head>
     <meta http-equiv="Content-type" value="text/html; charset=utf-8">

И когда вы выполняете запросы вставки, вы хотите убедиться, что кодировка символов таблицы и - это кодировка, в которой вы выполняете запросы, - UTF-8. Вы можете выполнить последнее, выполнив запрос SET NAMES utf8 непосредственно перед выполнением запроса вставки.

1 голос
/ 26 ноября 2009

http://www.phpwact.org/php/i18n/charsets

Этот сайт дал мне много полезных советов о том, как заставить все играть хорошо в UTF-8.

Я также рекомендовал переходить с htmlentities на htmlspecialchars, так как он более дружественный к UTF.

Главное, чтобы все говорили на одном языке. Ваша база данных, ваше соединение с базой данных, ваш PHP, ваша страница находится в utf8 (должен иметь метатег и заголовок, говорящий так).

0 голосов
/ 26 ноября 2009

Вы определенно хотите разобраться сейчас, а не позже. Одно из самых важных правил программирования - не следовать плохой идее - не углубляйтесь в себя!

Поскольку latin1 и utf-8 совместимы, вы можете конвертировать свои таблицы в utf-8, не манипулируя данными, содержащимися вручную. MySQL разберут эту часть для вас.

Тогда важно проверить, что все говорит UTF-8. Установите заголовки http в apache или используйте метатег - это говорит браузеру, что вывод HTML - это utf-8.

Имея это в виду, вам необходимо убедиться, что все отправляемые вами данные действительно имеют формат utf-8! Сконфигурируйте вашу IDE для сохранения файлов php / html как utf-8. Наконец, убедитесь, что PHP использует соединение utf-8 с MySQL - выполните запрос после подключения:

SET NAMES 'utf-8';
0 голосов
/ 26 ноября 2009

Извините за непонимание всего вашего вопроса. Но когда часть вопроса звучит как «UTF-8 или нет?», Ответ звучит так: «Конечно, UTF-8!»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...