PHP MySQL 如何正确地存储 / 转义字符串

标签: MySQL PHP
发布时间: 2017/4/9 23:48:56
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个问题与包含的字符串蜇 <br/> 或 &,< 等等。

在我将它们存储到数据库之前,我在这样逃跑

nl2br(htmlentities($string, ENT_QUOTES, 'UTF-8'));

然而有些时候当我显示存储的结果我得到这样的东西

&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&lt;br /&gt;<br /><br />

有人能帮/出示转义字符串但保留破发点,所以当我想要回在屏幕上显示它的最好方法。

谢谢你

解决方法 1:

确保您设置 double_encodefalse ,否则已编码的字符串将再次进行编码,把 &amp;&amp;amp; 。然后当你去使用后显示 html_entity_decode ,它会出现好像它仍然编码。

不理想的结果︰ http://ideone.com/uQxuAM


使用 htmlentities($string, ENT_QUOTES, 'UTF-8', false); 将确保这不会发生。

然后使用 html_entity_decode($string, ENT_QUOTES, 'UTF-8'); 显示的值。

演示︰ http://ideone.com/8Jo7YA


然而,MySQL 是完全有能力将解码的值存储在数据库中。

你永远不会想要 htmlentities 编码字符串的格式存储在数据库中。当您想要生成 CSV 或 PDF,发送一封电子邮件,或任何不是 HTML 时,会发生什么?

除了你要执行双编程的编码数据,增加了数据在数据库中,然后还需要解码输出的事实,还有的吨的文章在线回答为什么你不应该。

所以你应该只需要在 html 中显示得到的数据输出的值进行编码。

相反,你应该逃输入使用mysqli_real_escape_string

$string = '<a href="/path/to/file?a=b&foo=bar#baz">My Link</a>';
$sql = "INSERT INTO links (link)"
     . "VALUES(" . mysqli_real_escape_string($string) . "')";

或更好的是使用预准备的语句

$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();

然后要设置格式的输出作为成功要显示什么的消息已实际添加到数据库。

$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";

现在没有必要使用 html_entity_decode 要在浏览器中呈现的 html。

官方微信
官方QQ群
31647020