Ответ 1
Изменена кодировка HTML в ISO-8859-1, исправлена проблема! Глупый
У меня есть слова базы данных, которые включают специальный символ (по-испански, в основном, как тильды). В базе данных все сохраняется и корректно отображается с помощью PHPmyAdmin, но когда я получаю данные (используя PHP) и отображаю их в браузере, я получаю странный характер, например, "?" с квадратом... Мне нужно общее исправление, поэтому мне не нужно каждый раз избегать каждого символа, а также я мог бы вставлять специальные испанские символы из формы PHP в базу данных...
HTML правильный:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Все таблицы и базы данных установлены на utf8_spanish
Символ, который я получаю:
Любые предложения???
Спасибо!!!
Изменена кодировка HTML в ISO-8859-1, исправлена проблема! Глупый
Я хотел бы предоставить более подробную информацию о решении, предложенном vartec, которое (в зависимости от вашей установки MySQL) является наиболее правильным решением вашей проблемы. Прежде всего проблема с набором символов/кодировкой в MySQL является довольно сложной темой, которая подробно рассматривается в руководстве MySQL Глава 9.1 "Поддержка набора символов" . В вашем случае особенно 9.1.4. "Наборы символов соединения и сортировки" будут наиболее важными.
Чтобы сделать это коротко: MySQL должен знать, какой набор символов/кодировать ваше клиентское приложение (говорящий из базы данных persoective, что ваш PHP script) ожидает, поскольку он перекодирует все строковые данные из внутреннего набора символов/кодировки определенные на уровне сервера, базы данных, таблицы или столбца в набор символов/кодирование соединения. Вы используете UTF-8 на стороне клиента, поэтому должны сказать MySQL, что используете UTF-8. Это выполняется командой MySQL SET NAMES 'utf8'
, которая должна быть отправлена в качестве первого запроса при открытии соединения. В зависимости от вашей установки и клиентской библиотеки MySQL, используемой в PHP скрипт, это можно сделать автоматически при каждом подключении.
Если вы используете PDO, это просто вопрос настройки параметра конфигурации
$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
Использование mysqli, изменяющего набор символов/кодировку клиента, еще проще:
$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");
Я надеюсь, что это поможет сделать все это понятным.
Проблема SET NAMES 'utf8'
сразу после подключения:
$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");
Иметь перевод MySQL автоматически
$conn = mysql_connect('host', 'user', 'password');
mysql_set_charset('utf8',$conn);
http://es.php.net/manual/en/function.mysql-set-charset.php
EDIT: из вашего комментария я собираюсь, что это фактически закодировано в latin1, поэтому
mysql_set_charset('latin1_spanish_ci',$conn);
Я нашел это откуда-то и с тех пор использовал его целиком, не думая слишком много.
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
Святое дерьмо.. это сводило меня с ума. Я пытался сделать то же самое. Я добавил HTML-заголовок HTML-кода utf-8.. mysqli_set_charset() спас меня через несколько часов, но я рад, что у меня он работает сейчас
Другая функция, предназначенная для кодирования специальных символов и акцентов, - это htmlentities()
Включите кодировку Юникода в вашем HTML.
При работе со специальными символами я всегда забочусь о следующем:
Вы уверены, что у вас есть данные UTF8 в вашей базе данных?
Вы можете просто сделать:
$link = mysql_connect("host", "user", "password");
mysql_select_db("database", $link); mysql_query("SET NAMES 'utf8';", $link);
Мое решение: сделайте все вышеперечисленное но также im работает с блокнотом ++, и файл должен быть сохранен например: перейдите к кодировке на вкладке manu и сохраните файл → encode в utf8