在str_replace中使用函数

时间:2016-08-25 12:00:12

标签: javascript php regex str-replace

我试图手动将一些Javascript转换为PHP。我尝试转换的脚本是:

if (s)
    r += "\"" + s;
else
    r += "\"";

r += "\\\\\"+" + gv + "._+" + n.toString(16).replace(/[0-9a-f]/gi, function(c) {
    return gv + "." + b[parseInt(c, 16)] + "+"});
s = "";

我想出的是:

if ($s) {
    $r = $r . "\"" . $s;
} else {
    $r = $r . "\"";
}
$r = $r . "\\\\\"+" . str_replace([0-7],function($c, $GlobalVar, $b){
        return $GlobalVar.".".$b[$c]."+";
    },ord($n));

但我得到了:

  

localhost页面无效   localhost目前无法处理此请求   HTTP ERROR 500

我假设在str_replace中使用某个功能会破坏脚本,但如果我将其删除,我就不知道是否可以找到与Javascript代码相同的功能。任何帮助表示赞赏。

Php Log:

  

[Thu Aug 25 12:46:43.157926 2016] [:error] [pid 5864] [client 127.0.0.1:53936] PHP Catchable致命错误:类关闭的对象无法转换为/ var / www中的字符串/html/html/test.php

2 个答案:

答案 0 :(得分:0)

错误很简单,您只应阅读错误消息:

 Object of class Closure could not be converted to string

传递给函数的变量不是字符串。

你不能使用相同的Javascript语法,因为它与PHP不同,你不能做“文字转换”

答案 1 :(得分:0)

php函数完成了与js函数完全不同的事情。

假设gvb的值相同,n为整数,则最后一行应为

$r = $r . "\\\\\"+$gv._+" . implode('', array_map(function($c) use ($b, $gv) {return $gv . "." . $b[hexdec($c)] . "+";}, str_split(dechex($n))));

或格式化以便于阅读:

$r = $r . "\\\\\"+$gv._+" 
    . implode(
        '', 
        array_map(
            function($c) use ($b, $gv) {
                return $gv . "." . $b[hexdec($c)] . "+";
            }, 
            str_split(dechex($n))
        )
    );