strip替换为strip_tags,允许&lt ;,< =,> =,>在sql - 正则表达式?

时间:2015-12-03 01:16:27

标签: php sql regex preg-replace strip-tags

我在非Wordpress网站上使用wp-db.php,它允许使用apply_filters函数。我最初这样做了:

function apply_filters($type, $input) {
    return strip_tags($input);
}

我想阻止html被保存。我以为我修复了问题,但后来注意到包含像< =这样的东西的sql查询无效。

我想要它做的是剥离以字符开头的标签,例如<b...,但如果括号后面有空格或等号,例如<<=然后它不应删除它。

我找到了这段代码,但它不能按照我的要求运行:

preg_replace('/<[^>]*>/', '', $input);

e.g。

<b>test</b> abc <= def < ok? ilj >= xyz >

返回为:

test abc = xyz >

它只应删除<x...>,其中x不是空格或等号并删除</....>

BTW我注意到&lt;脚本&GT;不起作用所以我认为它可以&lt;留下来后留空间。

2 个答案:

答案 0 :(得分:0)

您可以使用一些preg_match字符串来执行操作。但它不确定它是否适用于所有自定义字符串。因此,您可以使用htmlspecialchars函数来更改

           &gt; is >

            &lt; is <

您可以在此处获得有关此功能的更多信息

http://www.w3schools.com/html/html_entities.asp

之后应用strip_tags而不是它适用于你。

所以你必须使用preg_match函数。试试这个吧。

     preg_replace("# <(?![/a-z]) | (?<=\s)>(?![a-z]) #exi", "htmlentities('$0')", $html);

答案 1 :(得分:0)

只有第一个标签有效:

<b>1</b> <0b>2</0b> < b>3</ > <'b>4</'b> <(>5</(> <=>6</=>

这个非贪婪的正则表达式删除了有效和结束标记:

/ <[^(=\d' )].*?> /克

在php中:

preg_replace('/<[^(=\d\' )].*?>/', '', $input);

请参阅https://regex101.com/

由于sql,我有其他标签:

col1 < 10
col2 <10
col3 <'2010-10-10'
col4 <(SELECT col5...)
col5 <=20