Я сделал несколько CMS на PHP, которые манипулируют данными из MySQL.
В моей CMS у меня есть некоторые поля ввода, в которых я хотел бы иметь фантастический автозаполнения jQuery. В принципе, идея состоит в том, чтобы создавать массивы jQuery из таблиц MySQL ...Проблема кодирования символов в PHP/MySQL/jQuery
Я работаю с PHP 5.3.0, MySQL 5.0.82 и Eclipse 3.4.2. Мой PHP-проект в Eclipse кодируется UTF-8. Мои страницы CMS находятся в кодировке символов UTF-8 (<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
). Сам сайт также используется в кодировке UTF-8. База данных MySQL и все таблицы находятся в UTF-8 (utf8_general_ci).
На данный момент все отлично работает, если я вхожу только буквы (даже международные и некоторые странные символы), но если я введу некоторые из этих символов "
, &
, <
или >
, я бегу в некоторые серьезные проблемы ...
Когда я ввожу такой текст, все хорошо выглядит в моей базе данных, но когда я пытаюсь создать массив для jQuery, он создает ошибку из-за кавычек (я полагаю, что даже одинарные кавычки здесь проблемы) ... Итак Полагаю, я должен как-то сбежать от них, верно? Затем я использую PHP htmlspecialchars
, и массив jQuery создан правильно. Даже когда я нажимаю внутри поля ввода и начинаю вводить текст, автозаполнение отображает все эти символы правильно. Но если я на самом деле выбираю одну из записей с этими символами, они внезапно появляются как экранированные символы html ("
, &
, <
, >
). Поэтому я попытался применить htmlspecialchars_decode
к тому же полю ввода, но это не помогло ... Есть ли способ правильно отобразить эти символы в моем поле ввода, когда я выбираю запись из автозаполнения jQuery?
Я пытался решить проблему, но не смог найти ничего, чтобы решить мою проблему ... Пожалуйста, помогите!
Заранее благодарим!
EDIT: Это путь я создаю массив для JQuery ($tags
только простой массив):
<?php
$t = implode(", ", $tags);
?>
<script>
$(document).ready(function(){
var data_tags = "<?php echo htmlspecialchars($t); ?>".split(" | ");
$("#input_tags").autocomplete(data_tags, { multiple: true, multipleSeparator: ", " });
});
</script>
Я знаю, что это, возможно, не самый лучший способ, но в целом это работает :)
Я генерации в поле ввода таким образом:
<?php
function inputField($label, $name, $type, $size, $default=NULL, $misc=NULL){
$printInput = "<tr><td align=\"right\" valign=\"top\">\n";
$printInput .= $label;
$printInput .= "</td><td>\n";
$printInput .= "<input type=\"".$type."\" size=\"".$size."\" name=\"".$name."\" id=\"".$name."\" value=\"".$default."\"> ".$misc."\n";
$printInput .= "</td></tr>\n";
return $printInput;
}
echo inputField("TAGS", "input_tags", "text", 70, $db_tags);
?>
Возможно, они закодированы в двойном кодировании? – alex
Нет. Я вставляю строки и выхожу из db без каких-либо специальных функций ... Просто «как есть» ... :) – errata