Php preg_replace未按预期工作

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 '@<

我想删除HTML标记,以及样式和脚本标记的内容,但我的代码没有删除样式标记内容,不知道为什么。你知道吗

$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标记,但不删除样式和脚本标记的内容。