好的,有很多关于消毒字符串的东西,但是很少,我可以找到最好的方法来准备用户输入(比如我现在正在键入的内容),以便插入内容管理系统然后如何过滤掉它。
我正在构建两种多语言(日语,英语+其他浪漫语言)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');
}
不幸的是,毕竟我仍然得到不一致的结果。大多数情况下,®符号变成小钻石。
我已经搜遍了这个,但似乎无法找到最好的方法......
答案 0 :(得分:1)
抱歉网页标题被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" />
答案 1 :(得分:1)
不要在数据库中放置htmlentities!永远不要调用html_entities(),它应该从php中弃用。使用htmlspecialchars但是在显示文本时,而不是在将其放入数据库之前。关键是要防止您的数据被视为html。翻译商标符号或版权符号毫无意义,因为它们不会造成风险。你唯一需要担心的是:&gt; &LT; &安培; '“
答案 2 :(得分:0)
答案 3 :(得分:0)
所有内容都已编码为utf8。将其解码为ISO-8859-1只会破坏任何日本人。
答案 4 :(得分:0)
我曾经遇到过编码问题,这个问题归结为php文件本身的编码。所以基本上确保文件本身编码为utf-8。在vim你可以做到 :e ++ enc =