好的,有很多关于清理字符串的东西,但我能找到的东西很少,关于准备用户输入的最佳方法(比如我现在正在输入的内容)以插入内容管理系统然后如何过滤它出来了。
我正在构建两个多语言(日语、英语 + 其他浪漫语言)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');
}
不幸的是,毕竟我仍然得到不一致的结果。大多数情况下,® 符号会变成小菱形。
我已经到处寻找一个很好的方法,但似乎找不到最好的方法......