显示“在td而不是<

时间:2016-08-09 08:41:52

标签: php text html-table formatted

我使用PHP将格式化的字符串存储在数据库中。 并在HTML表的td中显示该字符串。 我的示例文本就像 -

<font color="#0033CC"><b>water </b>releasing<i> H<sub>3</sub>O<sup>+</sup></i> ions; </font>

在td中显示时,它只显示原始数据而不是格式化文本。我在浏览器中查看了源代码,并在下面找到了数据。

<td>&lt;font color=&quot;#0033CC&quot;&gt;&lt;b&gt;water &lt;/b&gt;releasing&lt;i&gt; H&lt;sub&gt;3&lt;/sub&gt;O&lt;sup&gt;+&lt;/sup&gt;&lt;/i&gt; ions; &lt;/font&gt;</td>`

这意味着“替换为&quot;&gt;已替换为&gt;,依此类推。

PHP中是否存在内置方法以避免出现这种情况并显示格式化文本?

提前致谢!

3 个答案:

答案 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 &quot;sorti&quot; le &lt;strong&gt;chien&lt;/strong&gt; tout &amp;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