【问题标题】:preg_replace to preg_replace_callbackpreg_replace 到 preg_replace_callback
【发布时间】: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 标志在这种情况下没有任何作用,只需将其删除。
  • 无论如何,这似乎是一个写得很糟糕的代码:(为什么要删除实体?为什么不是所有实体?为什么不使用DOMDocumentstrip_tags 删除标签。为什么要删除缩进除了第一行?)。尝试理解这段代码的目标,并以更好的方式完全重写它。

标签: php preg-replace php-7


【解决方案1】:

/e 修饰符评估替换字符串中的 PHP 代码。

因为您的代码仅用空格替换找到的字符串,所以修饰符根本没有用,您可以简单地删除 "'&amp;#(\d+);'e"); 行中的 e

您可以在此页面上找到更多信息:PHP Pattern Modifiers

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2015-08-09
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多