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

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

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

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

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

Ответы [ 5 ]

1 голос
/ 02 февраля 2009

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

1 голос
/ 28 января 2009

Извините, заголовки веб-страниц были удалены редактором 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" />
0 голосов
/ 31 января 2009

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

0 голосов
/ 28 января 2009

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

0 голосов
/ 28 января 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...