PDO utf8_encoding моей текстовой строки дважды в INSERT? - PullRequest
3 голосов
/ 21 июня 2011

Код восстановления:

$status = $db->run(
    "INSERT INTO user_wall (accountID, fromID, text, datetime) VALUES (:toID, :fromID, :text, '" . time() . "')",
    array(":toID" => $toID, ":fromID" => %accountID, ":text" => $text)
);

Я беру входной текст из javascript, добавляю его в вызов AJAX для обработки, который вызывает функцию, включающую эти строки кода.

Текстовая строка, о которой идет речь: "Türkçe Türkçe Türkçe!"

После исследования базы данных сохраняется следующее значение "Türkçe Türkçe Türkçe!", которое является двойным utf8_encode'd.

При просмотре текста, ВЫБОР его из базы данных, я получаю «Türkçe Türkçe Türkçe!», то есть они должны быть сохранены в базе данных в первую очередь.

Насколько я знаю, я не кодирую данные, так как они подготавливаются PDO ...

1 Ответ

4 голосов
/ 21 июня 2011

Кодировка b * tch. Вы должны убедиться, что это так, как вы ожидаете, в нескольких местах:

  1. HTML-страница с Javascript. Установите это в utf-8 с метатегом как: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  2. Соединение с вашей базой данных. Выполните запрос set names 'utf8' после подключения к базе данных (и перед любыми другими запросами).

  3. Поле вашей базы данных. В MySQL это называется сличением , установите его на utf8_general_ci (ci означает без учета регистра).

Если у вас есть эти 3, ваши данные всегда должны быть и оставаться, utf-8 (если вы не делаете кодирование самостоятельно).

Для большей уверенности убедитесь, что ваши файлы исходного кода также имеют формат utf-8. Windows обычно по умолчанию iso.

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