【问题标题】:Using a function in str_replace在 str_replace 中使用函数
【发布时间】:2017-01-01 20:29:57
【问题描述】:

我正在尝试手动将一些 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 当前无法处理此请求。
HTTP 错误 500

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

PHP 日志:

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

【问题讨论】:

  • 您可能正在寻找preg_replace_callback(),您可以使用正则表达式作为搜索并使用回调函数作为替换。
  • 我的错误日志在哪里? (运行 Ubuntu)@PaulCrovella
  • 查看stackoverflow.com/questions/5127838/…获取错误日志位置。
  • @PaulCrovella 我添加了 Apache 错误日志
  • 我认为问题是str_replace的返回结果不能使用“。”连接。显然......

标签: javascript php regex str-replace


【解决方案1】:

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))
        )
    );

【讨论】:

    【解决方案2】:

    错误很简单,你应该只阅读错误信息:

     Object of class Closure could not be converted to string
    

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多