如何在使用htmlspecialchars()和htmlentities()后检索原始文本

时间:2017-04-10 14:25:35

标签: php database html-entities htmlspecialchars

我有一些文字,我将保存到我的数据库。文字可能如下所示:Welcome & This is a test paragraph。在PHP中使用htmlspecialchars()htmlentities()处理后,将此文本保存到我的数据库时,句子将如下所示:Welcome & This is a test paragraph

当我检索并显示相同的文本时,我希望它是原始格式。我怎么能这样做?

这是我使用的代码;

$text= htmlspecialchars(htmlentities($_POST['text'])); 
$text= mysqli_real_escape_string($conn,$text);

1 个答案:

答案 0 :(得分:0)

有两个问题。

首先,您使用htmlentitieshtmlspecialchars对HTML字符进行双重编码。这两个函数都做同样的事情,但是htmlspecialchars只用一个具有HTML字符实体等价物的字符子集(特殊)来做它。所以用你的例子,&符号会被编码两次(因为它一个特殊字符),所以你实际得到的将是:

$example = 'Welcome & This is a test paragraph';

$example = htmlentities($example);
var_dump($example);    // 'Welcome & This is a test paragraph'

$example = htmlspecialchars($example);
var_dump($example);    // 'Welcome & This is a test paragraph'

确定您需要使用哪些功能(可能htmlspecialchars就足够了)并且只使用其中一种功能。

其次,您在错误的时间使用这些功能。 htmlentitieshtmlspecialchars不会对“清理”您的数据以输入数据库做任何事情。 (不是说这就是你想要的,因为你没有提到这一点,但很多人似乎都试图这样做。)如果你想保护自己免受SQL注入,bind your values to prepared statements.逃避它就像你一样目前使用mysqli_real_escape_string做的很好,但这还不够。

htmlspecialcharshtmlentities具有特定目的:将要输出的字符串中的字符转换为HTML文档。只需等待它们使用它们,直到你准备好这样做。