Проблемы с кодировкой символов в приложении LAMP - UTF-8 или нет?
-
05-07-2019 - |
Вопрос
Я все еще изучаю веревки с помощью 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';