Php preg_replace未按预期工作
我想删除HTML标记,以及样式和脚本标记的内容,但我的代码没有删除样式标记内容,不知道为什么。你知道吗Php preg_replace未按预期工作,php,regex,preg-replace,Php,Regex,Preg Replace,我想删除HTML标记,以及样式和脚本标记的内容,但我的代码没有删除样式标记内容,不知道为什么。你知道吗 $search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript '@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags '@<
$search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
'@<style[^>]*?>.*?</style>@si', // Strip style tags properly
'@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments including CDATA
);
$htmlstring = 'Which brand(s) of single serve coffee brewer do you own? <style type="text/css"> #answer67627X49X1159other {display:none;}</style>';
$htmlstring .= '<style> #answer67627X49X1159999 {display:none;}</style><script>alert(123);</script>';
$htmlstring = preg_replace($search,'',$htmlstring);
echo '<input style="width:90%" type="text" value="'.$htmlstring.'" />';
$search=array('@]*?>.@si',//去掉javascript
“@@si”,//去掉HTML标记
“@]*?>.@si',//条形样式标记正确
'@@'//带多行注释,包括CDATA
);
$htmlstring='您拥有哪种品牌的单杯咖啡酿造机#应答67627x49x1159其他{显示:无;}';
$htmlstring.='#应答67627x49x1159999{显示:无;}警报(123);';
$htmlstring=preg_replace($search,,$htmlstring);
回声';
以下是输入标记中的输出
您拥有哪种品牌的单杯咖啡啤酒#Answer67627x49x1159其他{显示:无;}answer67627X49X1159999{显示:无;}图案顺序不正确
<?php
$search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<style[^>]*?>.*?</style>@si',
'@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
'@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments including CDATA
);
$htmlstring = 'Which brand(s) of single serve coffee brewer do you own? <style type="text/css"> #answer67627X49X1159other {display:none;}</style>';
$htmlstring .= '<style> #answer67627X49X1159999 {display:none;}</style><script>alert(123);</script>';
$htmlstring = preg_replace($search, '' ,$htmlstring);
var_dump($htmlstring);
// string(57) "Which brand(s) of single serve coffee brewer do you own? "
在进入样式标记之前,您已经剥离了html标记。更改替换的顺序,使脚本和样式先于其他脚本和样式处理
$search = array('@<script[^>]*?>.*?</script>@si', // Strip out javascript
'@<style[^>]*?>.*?</style>@si', // Strip style tags properly
'@<[\/\!]*?[^<>]*?>@si', // Strip out HTML tags
'@<![\s\S]*?--[ \t\n\r]*>@' // Strip multi-line comments including CDATA
);
$search=array('@]*?>.@si',//去掉javascript
“@]*?>.@si',//条形样式标记正确
“@@si”,//去掉HTML标记
'@@'//带多行注释,包括CDATA
);
1)2)。这会让你的问题变得非常简单(看看例子),为什么不直接使用strip_标签($htmlstring)@Marty:strip_标记删除HTML标记,但不删除样式和脚本标记的内容。