PHP / MySQL: вставка данных в базу данных - PullRequest
0 голосов
/ 19 апреля 2009

Я создаю веб-сайт, который получает текст с другой страницы и вставляет его в базу данных.

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

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />

Я имею в виду, что у меня сейчас вместо того, чтобы просто сохранить символ "'", HTML-версия "&#x27;" сохраняется в базе данных. Это происходит также при сохранении испанских или других специальных символов. Вместо буквы «ñ» для ejample я сохраняю «&ntilde;».

Это тратит впустую пространство в базе данных, а также мне нужно позже преобразовать вывод, используя content-type так:

Как я могу просто преобразовать или установить кодировку перед сохранением или просто разрешить MySQL конвертировать ее?

На случай, если вам необходимо узнать, как я подключаюсь к базе данных:

function dbConnect() {      
    $conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die ('Error.');
    return $conn;
}

    $conn = dbConnect();
    $stmt = $conn->stmt_init();

Надеюсь, ты сможешь мне помочь !! Спасибо.

Ответы [ 3 ]

1 голос
/ 19 апреля 2009

Я предлагаю использовать UTF-8, если есть неанглийские символы. Вы можете запустить SQL

SET NAMES UTF-8

для подключения к базе данных в UTF-8 сразу после подключения к базе данных.

Когда вы делаете это, вы не должны использовать «htmlspecialchars» или «htmlentities» при сохранении данных.

1 голос
/ 19 апреля 2009

Вы можете использовать html_entity_decode() для преобразования из HTML в (реальную) кодировку символов.

<? echo html_entity_decode("&ntilde;", ENT_COMPAT, "UTF-8"); ?>
ñ

Обратите внимание, что «HTML» не является кодировкой символов в обычном смысле, поэтому не понимается ни такими библиотеками, как iconv, ни самим MySQL.

Я бы также рекомендовал (в приведенном выше примере), чтобы все приложение использовало UTF-8. Односимвольные кодировки, такие как ISO8859, фактически устарели, поскольку Unicode так широко поддерживается.

0 голосов
/ 19 апреля 2009

Возможно, вам следует использовать htmlspecialchars вместо htmlentities, где первый просто заменяет специальные символы HTML &, <, > и " и не каждый символ, который может быть представлен ссылкой на именованную сущность, как последняя.

...