使用htmlspecialchars和htmlentities转换特殊字符

时间:2011-01-24 20:00:53

标签: php mysql special-characters html-entities

我现在对将特殊字符注入我的数据库感到困惑......

例如,我想接受像öù等字符,我希望将它们显示为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有关?

感谢。

2 个答案:

答案 0 :(得分:1)

这是因为你试图用htmlentites转换utf8字符。遗憾的是,该功能仅适用于ascii字符。最简单的解决方案是简单地将字符串存储在utf8数据库表中,并仅使用htmlspecialchars而不是htmlentities输出它们。请务必将页面编码设置为utf8。

答案 1 :(得分:1)

你也可以这么简单:

$text = htmlspecialchars( $text );
$text = mysql_escape_string( $text );