Я сделал несколько CMS на PHP, которые манипулируют данными из MySQL.
В моей CMS у меня есть несколько полей ввода, в которые я хотел бы внедрить причудливое автозаполнение jQuery. По сути, идея заключается в создании массивов jQuery из таблиц MySQL ...
Я работаю с 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>
Я знаю, что, возможно, это не самый лучший способ, но в целом это работает :) 1029 *
Я генерирую поле ввода следующим образом:
<?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);
?>