<?php
/**
 * Скрипт, демострирующий как можно обойти eval для нахождения результата конкатенации строк.
 *
 * @category   INDEX0H
 * @package    MAIN
 * @subpackage SCRIPTS
 * @author     Roman Levishchenko <index.0h@gmail.com>
 * @copyright  2013 Roman Levishchenko
 * @license    BSD
 * @version    {VERSION}
 * @link       https://gist.github.com/index0h/5932760
 */

$input = <<<EOD
"A"
. "\"" 
.

            '\''
.

9
.'
'
              .    'C' . " ' "
                  . '"'
EOD;
$evalString = eval("return {$input};");

// Разбор через токены. НАЧАЛО.

$tokenString = '';
$tokens = token_get_all('<? ' . $input);

foreach ($tokens as $token) {
    switch ($token[0]) {
        case T_LNUMBER:
            $tokenString .= $token[1];
        break;
        case T_CONSTANT_ENCAPSED_STRING:
            $tokenString .= stripcslashes(substr($token[1], 1, -1));
        break;
    }
}

// Разбор через токены. КОНЕЦ.

$equals = ($evalString === $tokenString) ? 'YES' : 'NO';


echo "
EVAL
-----------------------
$evalString
-----------------------
TOKEN
-----------------------
$tokenString
-----------------------
ARE EQUALS: $equals
";