2016-08-25 2 views
2

Я пытаюсь преобразовать Javascript в PHP вручную. Сценарий я пытаюсь преобразовать это:Использование функции в str_replace

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

Но я получаю:

The localhost page isn’t working
localhost is currently unable to handle this request.
HTTP ERROR 500

Я предполагаю, что с помощью функция в str_replace нарушает сценарий, но если я удалю его, я не знаю, смогу ли я найти ту же функциональность, что и код Javascript. Любая помощь приветствуется.

Php Вход:

[Thu Aug 25 12:46:43.157926 2016] [:error] [pid 5864] [client 127.0.0.1:53936] PHP Catchable fatal error: Object of class Closure could not be converted to string in /var/www/html/html/test.php

+3

Вы, вероятно, искать для 'preg_replace_callback() 'с этим вы можете использовать регулярное выражение в качестве поиска и функцию обратного вызова в качестве замены. – Rizier123

+0

Где мой журнал ошибок? (работает Ubuntu) @PaulCrovella –

+0

См. http://stackoverflow.com/questions/5127838/where-does-php-store-the-error-log-php5-apache-fastcgi-cpanel для местоположения журнала ошибок. – chris85

ответ

0

Функция PHP делает нечто совершенно отличное от того, что делает эта функция JS.

Предполагая одинаковые значения для gv и b и 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)) 
     ) 
    ); 
0

Ошибка проста, вы должны читать только сообщение об ошибке:

Object of class Closure could not be converted to string 

Переменная вы передаете функции не является строкой.

И вы не можете использовать тот же синтаксис Javascript, потому что он отличается от PHP, вы не можете сделать «буквальное преобразование»

Смежные вопросы