相关疑难解决方法(0)

使用preg_replace_callback替换已弃用的preg_replace/e

$result = preg_replace(
    "/\{([<>])([a-zA-Z0-9_]*)(\?{0,1})([a-zA-Z0-9_]*)\}(.*)\{\\1\/\\2\}/iseU", 
    "CallFunction('\\1','\\2','\\3','\\4','\\5')",
    $result
);
Run Code Online (Sandbox Code Playgroud)

上面的代码在升级到PHP 5.5后给出了弃用警告:

不推荐使用:preg_replace():不推荐使用/ e修饰符,而是使用preg_replace_callback

如何更换代码preg_replace_callback()

php preg-replace preg-replace-callback php-5.5

47
推荐指数
1
解决办法
10万
查看次数

Symfony 1.4使用php 5.5中的弃用函数

我最近将PHP从5.3.27升级到5.5.0.在我的Symfony 2.3.2项目中一切正常,我可以享受最新的PHP功能.

现在当我回到我的其他Symfony 1.4.16项目时,我得到一个关于preg_replace被/ e修饰符弃用的PHP错误.

我在论坛中找不到关于此错误的参考:以前是否有人遇到此问题?有什么样的补丁我可以开箱即用吗?升级到Symfony 1.4.20会解决这个问题吗?

错误消息如下所示:

不推荐使用:preg_replace():不推荐使用/ e修饰符,而是在第409行的/myproject/lib/vendor/symfony/lib/response/sfWebResponse.class.php中使用preg_replace_callback

一种方法可能是按照消息和手册中的建议修改代码.如何将preg_replace表达式更改为preg_replace_callback调用?

任何帮助/提示都将非常受欢迎.

编辑:

到目前为止,还没有补丁(Symfony 1.4.20没有解决这个问题).解决方案是将对preg_replace的失败调用替换为在sourche中对preg_replace_callback的相应调用,这很容易在sfWebResponse类中完成(感谢提示Jon).不幸的是,现在下一次失败的情况稍微复杂一些......另一方面,我们可能不得不使用/ e选项grep for preg_replace使用以找出Symfony可能会破坏的位置.这给出了不少结果:o

所以...我的结论是Symfony 1.4用户最好不要将PHP升级到5.5版,直到出现一些严重的补丁.你怎么看 ?还有其他选择

php preg-replace preg-replace-callback symfony-1.4

18
推荐指数
6
解决办法
3万
查看次数

如何更换我的字符串的某些部分?

如何用另一部分替换我的字符串的某个部分?

输入字符串:

"Hello, my name is Santa"
Run Code Online (Sandbox Code Playgroud)

如何a用其他东西改变我的字符串中的所有内容?

我想我需要一个foreach循环,但我不确定如何使用它.

php string replace

17
推荐指数
2
解决办法
4万
查看次数

有人可以解释/ e正则表达式修饰符吗?

我目前正在提高我对HTML,PHP,JavaScript等安全漏洞的了解.几个小时前,我/e在正则表达式中偶然发现了修饰符,但我仍然无法理解它是如何工作的.我已经看了一下文档,但这并没有真正帮助.

我理解的是,可以操纵此修饰符以使某人有机会执行PHP代码(例如,preg_replace()).我已经看到以下示例描述了一个安全漏洞,但没有解释,所以有人可以解释一下如何调用phpinfo()以下代码吗?

$input = htmlentities("");
if (strpos($input, 'bla'))
{
   echo preg_replace("/" .$input ."/", $input ."<img src='".$input.".png'>", "bla");
}
Run Code Online (Sandbox Code Playgroud)

php regex

16
推荐指数
2
解决办法
1万
查看次数

解释单引号字符串中的转义字符

有一个单引号字符串:

$content = '\tThis variable is not set by me.\nCannot do anything about it.\n';
Run Code Online (Sandbox Code Playgroud)

我想inerpret /处理字符串,好像它是双引号.换句话说,我想用实际值替换所有可能的转义字符(不仅仅是tab和linefeed,如本例所示),同时考虑到反斜杠也可能被转义,因此'\n'需要被替换由'\n'.eval()很容易做我需要的但我无法使用它.

有一些简单的解决方案吗?

(我发现一个类似的线程处理单引号字符串中变量的扩展,而我在替换转义字符后.)

php string escaping

10
推荐指数
2
解决办法
3348
查看次数

将preg_replace()替换为preg_replace_callback()

$source = preg_replace('/&#(\d+);/me', "utf8_encode(chr(\\1))", $source);
Run Code Online (Sandbox Code Playgroud)

上面的代码给出了不建议使用的警告。

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in 
Run Code Online (Sandbox Code Playgroud)

如何将preg_replace()替换为preg_replace_callback()?

php preg-replace preg-replace-callback

4
推荐指数
1
解决办法
1万
查看次数

PHP7 - 不再支持 /e 修饰符,请改用 preg_replace_callback

有人可以帮我解决这个错误吗?

警告:preg_replace():不再支持 /e 修饰符,请改用 preg_replace_callback

我的原始代码:

$match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
Run Code Online (Sandbox Code Playgroud)

所以我这样试过:

$match[1] = preg_replace_callback('/(?<=^|[\x09\x20\x2D])./e',
                    function ($matches) {
                        foreach ($matches as $match) {
                            return strtoupper($match);
                        }
                    },
                    strtolower(trim($match[1])));
Run Code Online (Sandbox Code Playgroud)

但我仍然遇到同样的错误:

警告:preg_replace_callback():不再支持 /e 修饰符,请改用 preg_replace_callback

php preg-replace preg-replace-callback

4
推荐指数
1
解决办法
3万
查看次数