Хорошо, есть тонна вещей по санации строк, но очень мало, что я могу найти, о лучших методах подготовки ввода пользователя (например, то, что я сейчас печатаю) для вставки в систему управления контентом тогда как его отфильтровать.
Я создаю две многоязычные (японский, английский + другие романские языки) CMS, и у меня очень много времени, чтобы оба специальных символа, таких как ®, ™, отображались вместе с японскими символами.
Я продолжаю получать очень противоречивые результаты.
У меня все установлено в UTF-8:
веб-страница: и
.htaccess файл: AddDefaultCharset UTF-8 AND (чтобы вызвать проблему)
после каждого соединения с БД: mysql_query ("SET NAMES 'UTF8'");
каждая база данных, таблица и поле также установлены в utf8_general_ci
Магические кавычки отключены. Сначала я предварительно обрабатываю пользовательский ввод с настройками htmlpurifier по умолчанию, затем запускаю на нем эту функцию:
function html_encode($var) {
// Encodes HTML safely for UTF-8. Use instead of htmlentities.
$var = htmlentities($var, ENT_QUOTES, 'UTF-8');
// convert pesky special characters to unicode
$look = array('™', '™','®','®');
$safe = array('™', '™', '®', '®');
$var = str_replace($look, $safe, $var);
$var = mysql_real_escape_string($var);
return $var;
}
Вот и все в базу.
Я возвращаю его из базы данных, отфильтровывая все с помощью этой функции:
function decodeit($var) {
return html_entity_decode(stripcslashes($var), ENT_QUOTES, 'UTF-8');
}
К сожалению, после всего этого я ПО-прежнему получаю противоречивые результаты. Чаще всего символы ® превращаются в маленькие бриллианты.
Я искал во всем этом хорошие слова, но, похоже, не могу найти лучшие методы ...