Подтвердить что ты не робот

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

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

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

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

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

Символ, который я получаю:

Любые предложения???

Спасибо!!!

4b9b3361

Ответ 1

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

Ответ 2

Я хотел бы предоставить более подробную информацию о решении, предложенном 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");

Я надеюсь, что это поможет сделать все это понятным.

Ответ 3

Проблема SET NAMES 'utf8' сразу после подключения:

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");

Ответ 4

Иметь перевод 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);

Ответ 5

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

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

Ответ 6

Святое дерьмо.. это сводило меня с ума. Я пытался сделать то же самое. Я добавил HTML-заголовок HTML-кода utf-8.. mysqli_set_charset() спас меня через несколько часов, но я рад, что у меня он работает сейчас

Другая функция, предназначенная для кодирования специальных символов и акцентов, - это htmlentities()

Ответ 7

Включите кодировку Юникода в вашем HTML.

Ответ 8

При работе со специальными символами я всегда забочусь о следующем:

  • У базы данных, табличных и полевых наборов символов установлено значение 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"

Ответ 9

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

Ответ 10

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

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

Ответ 11

Мое решение: сделайте все вышеперечисленное но также im работает с блокнотом ++, и файл должен быть сохранен например: перейдите к кодировке на вкладке manu и сохраните файл → encode в utf8