Проблемы с кодировкой символов в приложении LAMP - UTF-8 или нет?

StackOverflow https://stackoverflow.com/questions/1804887

Вопрос

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

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

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

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

Все мои веб-страницы имеют мета-http-экв = " Тип-контента " содержание = & Quot; текст / HTML; кодировка = UTF-8 & Quot;

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

Если вы действительно хотите понять эти проблемы, я бы начал с чтения эта статья на 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 непосредственно перед выполнением запроса вставки.

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

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

Поскольку 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';
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top