好吧,有很多关于清理字符串的东西,但我能找到的很少,关于准备用户输入(比如我现在键入的内容)插入内容管理系统的最佳方法,然后如何筛选出来的内容。
我正在构建两个多语种(日语、英语+其他浪漫语言)CMS,并有一个很好的时间得到两个特殊的字符,如?,™,一起显示日语字符。
我继续得到非常不一致的结果。
我把所有东西都设置为UTF-8:
网页:和
.htaccess文件:AddDefaultCharset UTF-8和(强制执行此问题)
每次数据库连接后: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');
                            }

不幸的是,经过这一切,我仍然得到不一致的结果。大多数情况下,®符号变成小钻石。
我已经到处找了一个很好的图坦卡蒙,但似乎找不到什么是最好的方法。。。

最佳答案

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

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

关于php - 用于php/mysql CMS的多语言用户输入的前后处理的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/487962/

10-16 14:47