目前正在敲定我的评论系统的编码,并且希望它能够像 Stack Overflow 处理他们的帖子等那样工作,我希望我的用户能够仅使用粗体、斜体和下划线,并做到这一点我会使用以下内容:
_ Text _ * BOLD * -Italic-
现在,首先我想知道一种将评论完全去除任何标签、html 实体等的方法,例如,如果用户要使用任何 html/php 标签,它们将从输入。
我目前正在使用 Strip_tags,但这可能会让输出看起来非常令人讨厌,即使已经进行了滥用或公然的 XSS/注入(inject)尝试,我仍然希望完整输出纯文本,而不是被截断因为 strip_tags 似乎在这方面造成了绝对的困惑。
然后我要做的就是用粗体 html 标签替换星号,等等,然后将内容中的 html 标签剥离干净。
人们建议我如何执行此操作,目前这是评论清理功能
function cleanNonSQL( $str )
{
return strip_tags( stripslashes( trim( $str ) ) );
}
最佳答案
PHP 标签被 <?
包围和 ?>
,或者也许<%
和 %>
在一些历史悠久的安装中,因此可以通过正则表达式来管理删除 PHP 标签:
$cleaned=preg_replace('/\<\?.*?\?\>/', '', $dirty);
$cleaned=preg_replace('/\<\%.*?\%\>/', '', $cleaned);
接下来处理 HTML 标签:这些标签被 <
包围。和 >
。同样,您可以使用正则表达式来做到这一点
$cleaned=preg_replace('/\<.*?\>/','',$cleaned);
这将会改变
$dirty="blah blah blah <?php echo $this; ?> foo foo foo <some> html <tag> and <another /> bar bar";
进入
$cleaned="blah blah blah foo foo foo html and bar bar";
关于php - 剥离输入以完成纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9555176/