我在非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;留下来后留空间。
答案 0 :(得分:0)
您可以使用一些preg_match字符串来执行操作。但它不确定它是否适用于所有自定义字符串。因此,您可以使用htmlspecialchars
函数来更改
> is >
< 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);
由于sql,我有其他标签:
col1 < 10
col2 <10
col3 <'2010-10-10'
col4 <(SELECT col5...)
col5 <=20