2016-08-09 71 views
0

我使用PHP在数据库中存储格式化的字符串。 并在HTML表格的td中显示该字符串。 我的示例文本是喜欢 -在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;等。

有没有建在PHP来避免这种情况的方法和显示格式的文本?

谢谢推进

+0

向我们展示您用于输出此代码的代码 – RiggsFolly

+0

您已将HTML字符串编码到某处,您需要在输出中对其进行解码。另请参阅^。 –

+0

看看这个http://php.net/manual/en/function.htmlspecialchars-decode.php – Jason

回答

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 

?> 
0

其实我在存储数据时犯了错误。 我正在使用下面的方法来首先处理数据。 // $ data = stripslashes($ data); // $ data = htmlspecialchars($ data); 评论这两个方法后解决了我的问题

+0

不,你没有......可以添加到数据库这样的刺。请离开htmlspecialchars(),并从数据库中获取字符串后使用htmlspecialchars_decode(),一切都会好的。 @mirzapinku –

+0

@ M.I。在进入数据库的字符串中使用'htmlentities()'没有任何真正的理由(如果您希望*仍然存储html数据);我个人认为它会导致比解决问题更多的问题。 – CD001

+0

@ CD001如果他从用户那里获得一些html输入,在添加到数据库之前不应该至少逃脱它吗? –

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

相关问题