【问题标题】:Best method for pre and post processing multilingual user input for a php/mysql CMS为 php/mysql CMS 预处理和后处理多语言用户输入的最佳方法
【发布时间】:2010-10-04 00:43:34
【问题描述】:

好的,有很多关于清理字符串的内容,但我能找到的内容很少,关于准备用户输入(就像我现在输入的内容)以插入内容管理系统的最佳方法如何过滤出来。

我正在构建两个多语言(日语、英语 + 其他罗曼语语言)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');
                            }

不幸的是,毕竟我仍然得到不一致的结果。 ® 符号通常会变成小菱形。

我已经到处寻找了一个很好的方法,但似乎找不到最好的方法......

【问题讨论】:

    标签: php mysql content-management-system filtering user-input


    【解决方案1】:

    抱歉,所见即所得编辑器清除了网页标题。为了清楚起见:

    网页标题是:

    <!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" />
    

    【讨论】:

      【解决方案2】:

      不要将 htmlentities 放入数据库中!永远不要调用 html_entities(),它应该在 php.ini 中被弃用。使用 htmlspecialchars 但在显示文本时,而不是在将其放入数据库之前。关键是防止您的数据被视为html。翻译商标符号或版权符号没有意义,因为它们不会造成风险。您唯一需要担心的html是: >

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:

          所有内容都已编码为 utf8。将其解码为 ISO-8859-1 只会破坏任何日本人。

          【讨论】:

            【解决方案5】:

            我曾经遇到过编码问题,归结为 php 文件本身的编码。所以基本上确保文件本身被编码为 utf-8。在 vim 你可以做 :e ++enc=

            【讨论】:

            • 文本有争议。它是 :e ++enc=utf-8
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-11-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多