Хорошо, есть масса материалов по очистке строк, но очень мало, что я могу найти, о лучших методах подготовки пользовательского ввода (например, того, что я сейчас печатаю) для вставки в систему управления контентом, а затем о том, как фильтровать это выходит.
Я создаю две многоязычные (японский, английский + другие романские языки) 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');
}
К сожалению, после всего этого я ВСЕ ЕЩЕ получаю противоречивые результаты. Чаще всего символы ® превращаются в маленькие ромбы.
Я искал повсюду хороший урок по этому вопросу, но, похоже, не могу найти, какие методы являются лучшими...