php - 剥离输入以完成纯文本

标签 php mysql

目前正在敲定我的评论系统的编码,并且希望它能够像 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/

相关文章:

php - PHP 中依赖注入(inject)容器的直接示例

python - 如何在 sqlalchemy 中执行 LIKE 查询?

一个简单数据库的 C#-mySQL 连接程序,具有 1 个执行基本操作的表

mysql - 如何在 MySQL If 语句中有一个范围?

php - 使用PHP统计在线用户数量

mysql - 使用php打印mysql数据

php - 我应该在哪里初始化 CodeIgniter 中的 Forge 类并使用 create_database 函数?

javascript - 如何设置图像轮播中可以显示的图像数量限制? (PHP)

javascript - Kendo UI 时间选择器 : disabled time values

php - MySQL中的字符串检查操作并将其映射到不同的值