Как я могу получить неанглийские символы из формы ajax в MySQL - PullRequest
2 голосов
/ 26 января 2011

У меня есть форма, которая отправляет данные с помощью плагина формы jQuery . Оттуда он проходит некоторую обработку на стороне сервера и, наконец, сохраняется в базе данных MySQL.

После отправки этих символов áâãäï они отправляются на сервер как áâãäï' (до попадания в базу данных). То же самое происходит с японскими символами и т. Д.

Я испробовал как UTF-8, так и ISO-8859-1 для кодирования форм, кодирования страниц, кодирования на стороне php-сервера и кодировки БД. Все еще не повезло.

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Внутренне JavaScript работает со строками UTF-16, а такие функции, как encodeURIComponent(), кодируют символы в UTF-8, поэтому проблема, вероятно, не в коде JavaScript. Возможно, проблема в вашем PHP-коде.

  • Каждая страница, отправляемая сервером (включая страницу, на которой находится форма), должна иметь заголовок Content-type: text/html;charset=UTF-8. Вы можете проверить это, используя панель Firebug Net.

  • Всегда установить кодировку символов вашего соединения MySQL перед выполнением каких-либо запросов. В противном случае MySQL будет интерпретировать каждый байт строки UTF-8 как символ Latin-1, что может легко вызвать то, что вы описываете. Используйте код, такой как:

    mysql_query("SET NAMES 'utf8'");    // works in old versions of PHP (< 5.2)
    mysql_set_charset('utf8',$conn);    // works in PHP 5.2+
    
  • Имейте в виду, что некоторые (не все) строковые функции PHP будут искажать текст Unicode .

1 голос
/ 27 января 2011

Символы, вероятно, вставляются из WORD (ISO-8859-1).Ajax ожидает ТОЛЬКО UTF-8, поэтому вам придется конвертировать их на клиенте перед отправкой на сервер.

См .: Изменить кодировку с UTF-8 на ISO-8859-2 в Javascript

...