2015-05-31 1 views
1

Я запускаю код PHP и получаю сообщение об ошибке.PHP Проблема с экранированными шестнадцатеричными символами

PHP Fatal Error: Call to undefined function \\x66\\x6f\\x6f() 

Ниже приведен код:

function string2binary($string) 
{ 
    $binary = ''; 
    $binarr = str_split($string); 

    for ($i=0; $i < count($binarr); $i++) 
     $binary.=strlen(decbin(ord($binarr[$i])))<8?str_pad(decbin(ord($binarr[$i])),8,0,STR_PAD_LEFT):decbin(ord($binarr[$i])); 

    return $binary; 
} 

function binary2string($binary) 
{ 
    $string = ''; 
    $chars = explode(' ' , chunk_split($binary , 8 , ' ')); 

    for ($i = 0; $i < count($chars); $i++) 
     if (! empty($chars[$i])) 
      $string .= chr(bindec($chars[$i])); 

    return $string; 
} 

function foo($bar = 'bar') 
{ 
    echo $bar . '<br />'; 
} 

$fn = "foo"; 

echo $fn . '<br />'; 

$fn(); 

$fn = "\x66\x6f\x6f"; 

echo $fn . '<br />'; 

$fn(); 

$fn = string2binary("foo"); 

echo $fn . '<br />'; 

$fn = binary2string($fn); 

echo $fn . '<br />'; 

$fn(); 

$fn = string2binary('\x66\x6f\x6f'); 

echo $fn . '<br />'; 

$fn = binary2string($fn); 

echo $fn . '<br />'; 

$fn(); 

Выход

foo 
bar 
foo 
bar 
011001100110111101101111 
foo 
bar 
010111000111100000110110001101100101110001111000001101100110011001011100011110000011011001100110 
\x66\x6f\x6f 
PHP Fatal Error: Call to undefined function \\x66\\x6f\\x6f() 

мне как-то нужно рассматривать как строку шестнадцатеричных последовательностей вместо плоской строки. Что означает эта ошибка?

+0

Вы можете дать текстовое представление о том, что вы пытаясь достичь? Это немного сложно отделить от кода. Ошибка возникает в последней строке. Вы вызвали '$ fn();'. Это означает: Вызвать функцию с именем, которое соответствует значению $ fn. Поскольку $ fn содержит '' \ x66 \ x6f \ x6f'', это недействительное имя функции. – GolezTrol

ответ

1

Вы должны использовать stripcslashes

$fn = binary2string($fn); 
echo stripcslashes($fn) . '<br />'; 

Используйте это значение для вызова функции, например:

function foo() { echo 'call'; } 

$bar = '\x66\x6f\x6f'; 
$fooName = stripcslashes($bar); 

echo $fooName . "\n"; 
$fooName(); 

Демо: http://3v4l.org/CjBBm

+0

Это решение сработало. – quazzimoto

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