Специальные символы в PHP / MySQL

Я имею в словах базы данных, которые включают специальный символ (по-испански, в основном, как тильды). В базе данных все сохраняется и корректно отображается с помощью PHPmyAdmin, но когда я получаю данные (используя PHP) и отображаю их в браузере, я получаю странный характер, например, «?» с квадратом … Мне нужно общее исправление, поэтому мне не нужно каждый раз избегать каждого символа, а также я мог бы вставлять специальные испанские символы из формы PHP в базу данных …

HTML правильный:

<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 

Все таблицы и базы данных установлены на utf8_spanish

Персонаж, которого я получаю:

Какие-либо предложения???

Благодаря!!!

Solutions Collecting From Web of "Специальные символы в PHP / MySQL"

Я хотел бы предоставить более подробную информацию о решении, предлагаемом vartec, которое (в зависимости от вашей установки MySQL) является наиболее правильным решением вашей проблемы. Прежде всего проблема с набором символов / кодировкой в ​​MySQL – довольно сложный вопрос, который подробно рассматривается в руководстве по MySQL. Глава 9.1 «Поддержка набора символов» . В вашем случае особенно 9.1.4. «Наборы символов соединения и сортировки» будут наиболее важными.

Чтобы сделать это коротко: MySQL должен знать, какой набор символов / кодирование вашего клиентского приложения (говорящий из базы данных persoective, который является вашим PHP-скриптом) ожидает, поскольку он перекодирует все строковые данные из внутреннего набора символов / кодировки, определенного на сервере, базы данных, таблицы или столбца в набор символов / кодирование соединения. Вы используете 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); 

Изменена кодировка HTML в ISO-8859-1, исправлена ​​проблема! глупый

Я нашел это откуда-то и с тех пор использовал его целиком, не думая слишком много.

 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_general_ * или utf8_unicode_ *
  • Я уверен, что мой редактор сохраняет файлы PHP с правильным набором символов
  • Я устанавливаю default_charset в php.ini в UTF-8 или
  • Я отправляю Content-Type: text / html; charset = заголовок UTF-8
  • Кодировка в теге META – UTF-8 (это перекрывается заголовком HTTP Content-Type)
  • При подключении к MySQL я выдаю следующие запросы:
    • SET NAMES utf8
    • SET CHARACTER SET utf8
    • SET COLLATION_CONNECTION = "utf8_general_ci" / "utf8_general_ci"

Вы уверены, что у вас есть данные UTF8 в вашей базе данных?

Вы можете просто сделать:

 $link = mysql_connect("host", "user", "password"); mysql_select_db("database", $link); mysql_query("SET NAMES 'utf8';", $link); 

мое решение: сделайте все вышеперечисленное, но я также работаю с блокнотом ++, и файл должен быть сохранен следующим образом: перейдите в кодировку на вкладке manu и сохраните файл -> encode в utf8