Кодировка текста в текстовых полях HTML - PullRequest
3 голосов
/ 18 апреля 2010

У меня есть сайт, на котором есть форма. Форма отправляет в php-скрипт, который затем вставляет данные в мою базу данных. Страница имеет атрибут charset = UTF-8 в теге , и база данных настроена для использования UTF-8. Однако, когда я копирую и вставляю символы из MS Word в поле, вывод искажается.

Например, кавычки в

Я использую «Microsoft Word» '' ''

стать

Я использую «Microsoft Word» ????

в базе данных.

Кто-нибудь знает, почему это может произойти?

Ответы [ 6 ]

2 голосов
/ 19 мая 2010

Вот что я предлагаю вам сделать, чтобы найти суть проблемы.

  1. MySQL использует кодировку Latin1 для хранения и передачи данных по умолчанию. Чтобы изменить это, сделайте следующее. Создайте свою базу данных с набором символов UTF8 / collation utf8_unicode_ci (см. http://dev.mysql.com/doc/refman/5.0/en/create-database.html).

    CREATE DATABASE example DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci;

  2. Скажите MySQL обрабатывать входящие / исходящие данные как UTF8. Перед отправкой любых запросов SQL в MySQL команда SET NAMES UTF8; должны быть сделаны. Это говорит MySQL принимать и обрабатывать все входящие / исходящие данные на сервере как UTF8. Это должно быть установлено только один раз для каждого соединения. Вы можете установить это, например, с помощью mysql_query("SET NAMES 'UTF8'");.

  3. Убедитесь, что вы на самом деле используете UTF8. Хотя вы, возможно, указали UTF8 в теге <meta>, вы можете отправлять содержимое в другой кодировке. Чтобы убедиться, что вы отправляете содержимое в кодировке UTF8, добавьте header('Content-Type: text/html; charset=utf-8'); в ваш файл PHP.

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

1001 * попробовать *

<form action="form_action.php" accept-charset="UTF-8">
0 голосов
/ 26 апреля 2010

Публикуете ли вы из <textarea> или WYSIWYG формы? JavaScript WYSIWYG может выполнять свою собственную кодировку.

Вы пробовали это в разных браузерах? Это может быть ошибка с конкретным браузером. Также попробуйте установить заголовки в PHP, а не с метатегом, поскольку ваш сервер может отправлять конфликтующие заголовки.

header('Content-Type: text/html; charset=utf-8'); 

Что произойдет, если вы сохраните данные $ _POST в файл? Кодировка выглядит нормально?

file_put_contents('post.log', print_r($_POST, true));

Что произойдет, если вы скопируете текст из Word в текстовый файл и вставите его содержимое в базу данных?

$db_query = 'INSERT INTO table SET col="' . mysql_real_escape_string(file_get_contents('input.txt')) . '"';
0 голосов
/ 22 апреля 2010

У меня было простое веб-приложение на Java, которое нигде не указывало ни одного набора символов или кодировок, и столкнулось с теми же проблемами. В моем случае следующие изменения привели к желаемому поведению:

  1. Изменить определение схемы БД для использования UTF-8 (с использованием MySQL).
  2. Изменить URL-адрес соединителя базы данных, чтобы указать UTF-8 в URL-адресе подключения (с использованием MySQL Connector-J)
  3. Изменение конфигурации сервера приложений для интерпретации данных параметров запроса как UTF-8.
  4. Измените все созданные HTML-страницы, указав UTF-8.
0 голосов
/ 20 апреля 2010

Не реальный ответ, а предложение. Сначала попробуйте тест бабушки (30 секунд): вставьте текст MS Word, который вы хотите скопировать, в хороший текстовый редактор, такой как editpad pro или notepad ++, если все будет выглядеть как надо, скопируйте его снова оттуда и вставьте его внутрь Ваша форма.

Другими словами, не копируйте и не вставляйте текст непосредственно из MS WORD.

0 голосов
/ 18 апреля 2010

Запустите set names utf8 запрос и избавьтесь от всех функций перекодирования в вашем коде

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