HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

PHPの識別子にアスキーコード0x7Fが使えることの検証

ということなので、実際に試してみた。

どうせなら1つのソースコードで完結させてやろうということで得られたコードが以下。

<?php

$name = "\x7F";
$expr = '$' . $name . '="b";var_dump($name, $' . $name . ');';
var_dump($expr);
eval($expr);

これを実行すると、以下のように出力される。(0x7Fの部分は□で表している)

string(27) "$□="b";var_dump($name, $□);"
string(1) "□"
string(1) "b"

ちなみに、識別子の先頭文字としては使えない数字を入れてみたコード:

<?php

$name = "1\x7F";
$expr = '$' . $name . '="b";var_dump($name, $' . $name . ');';
var_dump($expr);
eval($expr);

を実行すると、ちゃんとエラーになる。

string(29) "$1□="b";var_dump($name, $1□);"
PHP Parse error:  syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /home/kajino/foo.php(6) : eval()'d code on line 1