我想知道是否有人可以帮我这个。
我们在错误日志中收到此错误:
[13-Mar-2018 16:42:40 UTC] PHP不推荐使用:preg_replace():/ e 不推荐使用修饰符,而是使用preg_replace_callback 第58行的public_html / check_requirements.php
check_requirements.php的第58行是:
$string = preg_replace('~�*([0-9]+);~e', 'chr(\\1)', $string);
我担心我们只是为其他人托管网站,而且由于最近的PHP升级,似乎发生了错误。
有谁知道如何更改代码的第58行来解决问题?
非常感谢你的帮助
詹姆斯
15/03/2018
谢谢Eydamos。我已经用你的建议替换了代码中的行
$string = preg_replace_callback(
'~�*([0-9]+);~',
function ($matches) {
return chr($matches[1]);
},
$string
);
不幸的是,我再次加载了该网站并检查了错误日志,它提出了以下内容:
[15-Mar-2018 09:02:09 UTC] PHP不推荐使用:preg_replace():不推荐使用/ e修饰符,而是在第57行的public_html / check_requirements.php中使用preg_replace_callback
第57行是:$string = preg_replace('~�*([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
看起来你的第一个建议解决了这个问题,但另一个已经变得明显了。我也不确定我应该怎么做这件事。你介意看看我吗?如果有帮助,我可以粘贴整个代码。
我真的很感谢你对这个的帮助。这完全取决于我的专业领域 - 只是我们从一个旧网站继承的东西,我们已经接管了托管。
答案 0 :(得分:2)
这是一个简单的修复,您只需将第二个参数转换为函数即可。像这样:
$string = preg_replace_callback(
'~�*([0-9]+);~',
function ($matches) {
return chr($matches[1]);
},
$string
);
除此之外,您可以更轻松地归档相同的结果:
$string = html_entity_decode($string);
第二个就像第一个一样简单:
$string = preg_replace_callback(
'~�*([0-9a-f]+);~i',
function ($matches) {
return chr(hexdec($matches[1]));
},
$string
);
基本上你只需要做三个步骤:
答案 1 :(得分:-1)
根据PHP文档http://php.net/manual/en/reference.pcre.pattern.modifiers.php 'e'修饰符在5.5.0版本中已弃用,已从PHP 7中删除,因此如果您考虑升级到PHP 7,则应将代码替换为与文档类似的内容或@Eydamos提供的答案