我遇到包含<br/>
或&amp;的字符串sting问题,&lt;等等。
我在将它们存储到DB
之前就这样逃避了nl2br(htmlentities($string, ENT_QUOTES, 'UTF-8'));
然而,有时当我显示存储的结果时,我会得到像这样的东西
&lt;br /&gt;&lt;br /&gt;<br /><br /><br /><br />
有人可以帮助/向我展示逃避字符串的最佳方法,但保留断点等等,当我想将其显示回屏幕时。
谢谢你
答案 0 :(得分:2)
确保将double_encode
设置为false
,否则已经编码的字符串将再次编码,将&
转换为&amp;
。然后,当您使用html_entity_decode
后显示它时,它将显示为仍然编码。
使用htmlentities($string, ENT_QUOTES, 'UTF-8', false);
将确保不会发生这种情况。
然后使用html_entity_decode($string, ENT_QUOTES, 'UTF-8');
显示值。
但是,MySQL完全能够将解码后的值存储在数据库中。
您永远不希望在数据库中存储htmlentities编码的字符串。如果要生成CSV或PDF,发送电子邮件或任何非HTML的内容,会发生什么?
除了你必须执行双重编码数据编程,增加数据库中的数据量,然后仍然需要解码输出,有大量的文章在线回答为什么你不应该。< / p>
因此,您只需编码用于在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。
答案 1 :(得分:1)
html_entity_decode()
可能会这样做。
$string = '<a href="http://test.com>test</a><br/>test';
$encode = nl2br(htmlentities($string, ENT_QUOTES, 'UTF-8'));
echo html_entity_decode($encode, ENT_QUOTES, 'UTF-8');
输出原始$string
<a href="http://test.com>test</a><br/>test