PHPのショートオープンタグ'<?'を正規表現以外で置き換える
3v4lでもやっぱりディレクティブしてできなかったので、こっちに。。
以下を php -d short_open_tag=1 test.php などで試してください
<?php $source = <<<'CODE' <? $sql = <<<SQL select * from table_a where id <? SQL; CODE; $tokens = token_get_all($source); $new_source = ''; foreach ($tokens as $token) { if (is_array($token) && $token[0] === T_OPEN_TAG) { $new_source .= '<?php'; } else { $new_source .= is_array($token) ? $token[1]: $token; } } var_dump($new_source);
- @see https://github.com/fabpot/PHP-CS-Fixer/blob/master/Symfony/CS/Fixer/ShortTagFixer.php#L24
- @see https://github.com/fabpot/PHP-CS-Fixer/issues/303
- @see https://github.com/fabpot/PHP-CS-Fixer/issues/183
なんで未だにPHPParserつかってないのかふしぎ☆