我使用PHP将格式化的字符串存储在数据库中。 并在HTML表的td中显示该字符串。 我的示例文本就像 -
<font color="#0033CC"><b>water </b>releasing<i> H<sub>3</sub>O<sup>+</sup></i> ions; </font>
在td中显示时,它只显示原始数据而不是格式化文本。我在浏览器中查看了源代码,并在下面找到了数据。
<td><font color="#0033CC"><b>water </b>releasing<i> H<sub>3</sub>O<sup>+</sup></i> ions; </font></td>`
这意味着“替换为"
&gt;已替换为>
,依此类推。
PHP中是否存在内置方法以避免出现这种情况并显示格式化文本?
提前致谢!
答案 0 :(得分:0)
您可以使用html_entity_decode();
<?php
$orig = 'J\'ai "sorti" le <strong>chien</strong> tout à l\'heure';
$a = htmlentities($orig);
$b = html_entity_decode($a);
echo $a; // J'ai "sorti" le <strong>chien</strong> tout &agrave; l'heure
echo $b; // J'ai "sorti" le <strong>chien</strong> tout à l'heure
?>
答案 1 :(得分:0)
实际上我在存储数据时犯了错误。 我首先使用以下方法处理数据。 // $ data = stripslashes($ data); // $ data = htmlspecialchars($ data); 评论后这两种方法解决了我的问题
答案 2 :(得分:0)
首先,在保存数据之前不要对HTML特殊字符进行编码
你最好在print
/ echo
之前这样做。
<?php
function h($str)
{
return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
$data = get_something_data_from_database();
/* More logic... */
?>
<!DOCTYPE html>
<title>Example</title>
<meta charset="UTF-8">
<div><?=h($data)?></div>
是的,<?=h(...)?>
是一个成语。 (<?=...?>
是echo
)
或者您是否需要允许用户输入原始HTML?如果没有过滤或验证,它会为我们带来主要的漏洞: Cross Site Scripting 。为此,您需要使用 HTML Purifier 。