Проблемы с сохранением данных, таких как 12 ÷ 5 - PullRequest
1 голос
/ 30 октября 2009

У меня есть следующие данные для сохранения в базе данных, используя php

мои данные: 12 ÷ 5

У меня есть следующий код:

  $.ajax({
    type: "POST",
    url: "add_proc.php",
    data: "topic="+ encodeURIComponent(field1)

Когда я проверяю значение field1 в firebug, оно совпадает с 12 ÷ 5, но когда значение сохраняется в базе данных, оно 12 ÷ 5.

     $topic=mysql_escape_string($_POST['topic']);
      echo($topic); 

Даже если я отображаю значение переменной после записи, я получаю 12 ÷ 5.

Я не могу понять, где проблема?

Ответы [ 3 ]

2 голосов
/ 30 октября 2009

÷ кодируется в UTF-8 - http://www.fileformat.info/info/unicode/char/00f7/

#pseudo
utf8('÷')    => 'Ã' + '·'
utf8(0x00F7) => 0xC3, 0xB7

Вы можете использовать utf8_decode (я предполагаю, что кодировка от $_POST):

$topic = mysql_escape_string(utf8_decode($_POST['topic']));

Убедитесь, что ваша база данных / таблицы имеют Поддержка Unicode / UTF-8 .

В качестве альтернативы, оставьте его в кодировке и просто echo, как в кодировке UTF-8 на странице (как предложил Ates Goral), чтобы браузер мог обработать декодирование для вас.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
1 голос
/ 30 октября 2009

Это определенно проблема кодирования. Вот почему.

Знак деления ( U + 00F7 ) кодируется в UTF-8 как 2 байта, 0xC3 и 0xB7.

Но в ISO-8859-1 (и многих других кодировках) эти байты по отдельности представляют собой два отдельных символа: U + 00C3 и U + 00B7 соответственно .

Так что где-то в процессе ваш кодированный в UTF-8 знак деления декодируется как некоторое другое кодирование (скорее всего ISO-8859-1).

Проверьте PHP UTF-8 Cheatsheet в качестве начала. Если вы выполняете все эти шаги и у вас все еще есть проблема, дайте мне знать, и я посмотрю, что я могу сделать, чтобы помочь.

0 голосов
/ 30 октября 2009

Убедитесь, что кодировкой содержимого вашей входной HTML-страницы является UTF-8. Таким образом, PHP будет знать, что контент, который он получает, находится в UTF-8.

Вы можете сделать это, добавив в заголовок документа следующее:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Обновление: Также убедитесь, что HTML-код, который вы генерируете (эхо), также сообщает UTF-8 в качестве кодировки контента. Как только вы получите эхо, следующий шаг - убедиться, что ваша БД также ожидает / хранит UTF-8.

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