我现在对将特殊字符注入我的数据库感到困惑......
例如,我想接受像ö
,ù
等字符,我希望将它们显示为html,例如法语名称Löic
。
我认为我必须先将这些特殊字符转换为html实体,然后再将它们注入数据库,例如ö
ö
。
如果我使用htmlspecialchars()
转换它们,
Array
(
[name] => Löic
)
if(isset($_POST['name'])) $name = preg_replace('/\s\s+/', ' ', trim($_POST['name']));
$name = htmlspecialchars($name, ENT_QUOTES);
所以它应该被转换为这个Löic
,但它根本没有被转换,而是原样,
Löic
所以这是我检查数据库时得到的,它存储为,
Löic
如果我使用htmlentities()
转换它们,
$name = htmlentities($name, ENT_QUOTES);
然后我明白了,
Löic
并在我的html上显示为
Löic
为什么这样做?我的脑袋会爆炸!我不知道问题出在哪里。请帮忙......我该怎样做才能做到正确?
是否与我在该名称栏中设置的utf8_general_ci
有关?
感谢。
答案 0 :(得分:1)
这是因为你试图用htmlentites转换utf8字符。遗憾的是,该功能仅适用于ascii字符。最简单的解决方案是简单地将字符串存储在utf8数据库表中,并仅使用htmlspecialchars而不是htmlentities输出它们。请务必将页面编码设置为utf8。
答案 1 :(得分:1)
你也可以这么简单:
$text = htmlspecialchars( $text );
$text = mysql_escape_string( $text );