Символы, выделенные MYSQL, отображаются как% E9 - PullRequest
0 голосов
/ 30 мая 2010

Я отправляю данные из as3 в MSQL с помощью небольшого php-скрипта!

Моя проблема в том, что все мои акцентированные символы отображаются как странные изо-символы.

Пример: отображается é% E9

Очевидно, что сортировка моего поля установлена ​​на utf8_general_ci

Даже когда я пытаюсь вставить данные из простого PHP-скрипта без as3, я получаю ту же ошибку.

<?php

mysql_connect("***", "***", "***") or die("Error :" .mysql_error());
mysql_select_db("***");


$query ="INSERT INTO test (message) values ('éèàïû')";

mysql_query($query) or die("Error updating DB");


?>

Есть идеи, что я делаю неправильно и как я могу это исправить?

Заранее спасибо.

Jk_

Ответы [ 2 ]

1 голос
/ 30 мая 2010

Проблема в этом случае может заключаться в нескольких местах: для обеспечения совместимости ввода utf8, вы должны проверить вход в нескольких местах:

  1. Если вы получаете данные из формы, убедитесь, что вы указали, что используемая кодировка указана сервером (например, через AddCharset на Apache) или, что еще лучше, указана с помощью <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> заявление. Обратите внимание, что если сервер заявляет, что кодировка является латинской, а PHP имеет значение utf8, отображение может быть неправильным. Поэтому настоятельно рекомендуется иметь метатег в заголовке.

  2. В вашей конфигурации PHP попробуйте использовать строку default_charset = "utf8". Это должно быть по умолчанию, но просто проверьте. Это контролирует выходную кодировку, и если это не соответствует серверу Apache или кодировке страницы, utf8 может быть выведен как ASCII, что приведет к вашей проблеме. Если вы не можете получить доступ к php.ini, используйте ini_set для установки этой опции в общем включаемом файле.

  3. Убедитесь, что вы делаете mysql_set_charset('utf8'); после подключения к MySQL. Это важно, так как оно делает ваше соединение с MySQL UTF8. Если вы этого не сделаете, ваши уже PHP-строки в кодировке UTF8 могут быть снова закодированы в базе данных MySQL. Это приводит к проблеме, называемой двойным кодированием. Изменить: хотя некоторые ответы рекомендуют SET NAMES, это не рекомендуется в документации PHP

  4. Пусть ваша база данных, таблица и кодировка столбцов будут иметь вид utf8. Я думаю, у вас уже есть это.

Если вы все это сделаете, ваше приложение должно нормально работать с обычными функциями PHP, хотя различные библиотеки могут что-то испортить.

0 голосов
/ 30 мая 2010

mysql не кодирует ваши данные. Какой-то твой код делает это. Может быть в выбранное время.

Помимо этой проблемы, вы должны выдавать запрос SET NAMES <encoding> каждый раз, когда вы подключаетесь к базе данных, где <encoding> - это код вашей HTML-страницы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...