【发布时间】:2017-06-02 15:15:23
【问题描述】:
我刚刚升级到 PHP7 并收到此警告:
警告:preg_replace():不再支持 /e 修饰符,请在第 322 行使用 preg_replace_callback
如何将 preg_replace(下面代码中的第二个 preg_replace)替换为 preg_replace_callback?这是我不太了解的第 3 方代码。我知道一些 PHP 并试图寻找解决方案,但我无法理解它。
// Remove HTML Entities //
$string = preg_replace('/&(#?x?[0-9a-z]+)?;/', '', $string);
$search = array ("'<script[^>]*?>.*?</script>'si", // Strip out javascript
"'<[\/\!]*?[^<>]*?>'si", // Strip out HTML tags
"'([\r\n])[\s]+'", // Strip out white space
"'&(quot|#34);'i", // Replace HTML entities
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e");
if ($search && $string){
return preg_replace($search, ' ', $string); // Line 322, the line that I need to fix
} else {
return false;
}
【问题讨论】:
-
e标志在这种情况下没有任何作用,只需将其删除。 -
无论如何,这似乎是一个写得很糟糕的代码:(为什么要删除实体?为什么不是所有实体?为什么不使用
DOMDocument或strip_tags删除标签。为什么要删除缩进除了第一行?)。尝试理解这段代码的目标,并以更好的方式完全重写它。
标签: php preg-replace php-7