nl2br把html标签

问题描述:

我有我今天收到的消息从Gmail这样的网络邮件的PHP脚本之间BR:nl2br把html标签

$content=' 
<p>This is just example for MessageContent</ 
p>Test...<span>Test</span>Test..<span 
>Test</span>'; 

如何我nl2br打印呢?

如果我使用echo nl2br($content);,我得到这样的结果:

<br /> 
<p>This is just example for MessageContent</<br /> 
p>Test...<span>Test</span>Test..<span<br /> 
>Test</span> 

那么,如何解决这个问题?

+0

而不是试图用nl2br格式化文本,岂不是更好地把它含有元素和风格,以达到预期的效果? – GordonM 2012-07-06 17:26:10

+10

为什么你要这个开始?你应该只在不是HTML的文本上应用'nl2br'。 – deceze 2012-07-06 17:26:29

+0

您应该手动修复该html代码,那些破碎的心脏标记是不健康的。 – biziclop 2012-07-06 17:30:29

我个人认为在邮件中接受html是不好的,你应该去掉任何html,为什么?

因为如果您接受html tobe呈现。例如:不使用来自未知来源的htmlentities($content),然后恶意的人可以添加 javascript和XSS攻击你,或者是一个狡猾的链接和CSRF你甚至只是一个1px的图像,并得到你的IP。

但是,如果您接受风险,您可以按原样呈现消息。

<?php 
$content=' 
<p>This is just example for MessageContent</ 
p>Test...<span>Test</span>Test..<span 
>Test</span>'; 

//Or at least sanitise abit - Remove all tags except p's an a's 
$content = strip_tags($content,'<p><a>'); 
?> 

nl2br用于您期望没有html的内容。

你既可以改变$内容

$content=' 
<p>This is just example for MessageContent</p> 
Test...<span>Test</span>Test.. 
<span>Test</span>'; 

或者你可以只使用

echo $content;