我有一些文字,我将保存到我的数据库。文字可能如下所示: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);
答案 0 :(得分:0)
有两个问题。
首先,您使用htmlentities
和htmlspecialchars
对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
就足够了)并且只使用其中一种功能。
其次,您在错误的时间使用这些功能。 htmlentities
和htmlspecialchars
不会对“清理”您的数据以输入数据库做任何事情。 (不是说这就是你想要的,因为你没有提到这一点,但很多人似乎都试图这样做。)如果你想保护自己免受SQL注入,bind your values to prepared statements.逃避它就像你一样目前使用mysqli_real_escape_string
做的很好,但这还不够。
htmlspecialchars
和htmlentities
具有特定目的:将要输出的字符串中的字符转换为HTML文档。只需等待它们使用它们,直到你准备好这样做。