Лучший метод предварительной и последующей обработки многоязычного пользовательского ввода для CMS php/mysql

Хорошо, есть масса материалов по очистке строк, но очень мало, что я могу найти, о лучших методах подготовки пользовательского ввода (например, того, что я сейчас печатаю) для вставки в систему управления контентом, а затем о том, как фильтровать это выходит.

Я создаю две многоязычные (японский, английский + другие романские языки) 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');
                            }

К сожалению, после всего этого я ВСЕ ЕЩЕ получаю противоречивые результаты. Чаще всего символы ® превращаются в маленькие ромбы.

Я искал повсюду хороший урок по этому вопросу, но, похоже, не могу найти, какие методы являются лучшими...


person fred    schedule 28.01.2009    source источник


Ответы (5)


Извините, что заголовки веб-страниц были очищены редактором wysiwyg. Для ясности:

Заголовки веб-страниц:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

А также

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
person fred    schedule 28.01.2009

Не помещайте htmlentities в свою базу данных! Никогда не вызывайте html_entities(), он должен быть исключен из php. Используйте htmlspecialchars, но при отображении текста не раньше, чем вы поместите его в базу данных. Дело в том, чтобы предотвратить обработку ваших данных как html. Нет смысла переводить символы товарных знаков или символы авторского права, потому что они не несут риска. Единственный html, о котором вам нужно беспокоиться, это: > ‹ & ' "

person jcampbell1    schedule 02.02.2009

http://us3.php.net/utf8_encode http://us3.php.net/utf8-decode

Это должно помочь.

person J.J.    schedule 28.01.2009

Все уже закодировано в utf8. Декодирование в ISO-8859-1 просто разрушило бы любого японца.

person fred    schedule 28.01.2009

Однажды у меня была проблема с кодировкой, которая сводилась к кодировке самих файлов php. Поэтому в основном убедитесь, что сами файлы закодированы в utf-8. В vim вы можете сделать: e ++enc=

person scc    schedule 31.01.2009
comment
текст перепутался. Это: e++enc=utf-8 - person scc; 31.01.2009