2012-07-04 31 views
1

我想验证评论表单使用AJAX/PHP,现在已经非常接近除了在PHP中的strip_tags功能似乎并没有删除所有元素。以下是我的:php strip_tags没有删除div(和其他人)

$msg = $_POST['message']; 
$msg = strip_tags($msg); 

此功能似乎只是删除结束标签。例如。输入消息框<div>未被删除,其中</div>被删除。 我想逐字删除邮件中的每个html元素。我如何实现这一目标?

谢谢,丹。

编辑:

我觉得自己像个白痴!

我有一个验证函数与我的显示评论功能分开,只是意识到我的错误。我从未在显示的消息上运行strip_tags!

无论如何,谢谢你试图帮助!

+0

评论那些谁可能发现自己在我的处境。如果您剥离了由模板语言生成的HTML标记(例如,Wordpress简码),请确保模板已经先渲染。 – Michael

回答

3

strip_tags()可能会失败的一件事是htmlentities()

例如,它会使<div>显示为%3Cdiv%3E

试试这个。 htmlentities将转换代码,例如。例如,将HTML文件%3C设置为HTML。 <

$msg = strip_tags(htmlentities($msg)); 

你应该可以看到你想要什么,通过比较这些调试:

echo $msg . '<br/>'; 
echo strip_tags($msg) . '<br/>'; 
echo htmlentities($msg) . '<br/>'; 
echo strip_tags(htmlentities($msg)) . '<br/>'; 
+3

这不完全正确。 htmlentities不会将实体转换为HTML,但是相反,例如。 HTML到实体。我相信你打算使用的函数是html_entity_decode() – WooDzu

0

strip_tags()看到一个标签作为<之间以及 第一空格>

不区分大小写字符串或因此strip_tags('</div >')strip_tags('<div>')如果你在里面有任何空白会给没有变化。

您可能希望发布您想要清理的字符串的示例。

您还应该尝试直接回显$ msg并查看发出的来源。由于您在发布数据(取决于您如何从客户端发送数据),您可能会发现您实际上试图剥离%3Cdiv%3E%3C%2Fdiv%3E(这是有效的),而不是您期望的<div></div>

+0

例如:http://codepad.org/kvVNf2VY –

+1

是的,这就是为什么我说(没有空格),因为我无法弄清楚如何将它作为整个单词包含在我的问题中:S抱歉混淆。 –

+0

由于您的澄清而进行了修改,并给出了替代解释。 –