好吧,有很多关于清理字符串的东西,但我能找到的很少,关于准备用户输入(比如我现在键入的内容)插入内容管理系统的最佳方法,然后如何筛选出来的内容。
我正在构建两个多语种(日语、英语+其他浪漫语言)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/