pre-plugin icon indicating copy to clipboard operation
pre-plugin copied to clipboard

Case <?php in the PHP script itself

Open anibalsanchez opened this issue 6 years ago • 2 comments

The plugin assumes that <?php is not present in the script itself. If <?php is included in the file, at any point, the engine injects the macro.yay in the result.

You can verify the issue in this file, processing it with any plugin: https://github.com/symfony/translation/blob/master/Translator.php#L344

As a workaround, I've implemented in the caller a preprocessing of the text to escape <?php before the call. But, I think it has to be fixed in the engine to support any PHP script.

anibalsanchez avatar Jan 17 '19 11:01 anibalsanchez

I see what you're saying, but I can't get my head around a fix. Could you show me the code you've used to work around it, so I can get a better understanding of what needs to be done?

assertchris avatar Jan 20 '19 11:01 assertchris

The workaround is very simple. It just replaces the additionals <php with an encoded tag ºººhp. After the processing, it reverts the encoding:

// Escape <?php in the script text
$code = substr($code, 5);
$code = str_replace('<?php', 'ºººhp', $code);
$code = '<?php'.$code;

$parsedCode = Pre\Plugin\parse($code);

// Unescape <?php in the script text
$parsedCode = str_replace('ºººhp', '<?php', $parsedCode);

The alternative is changing how the macro is inserted in the dynamic code to avoid the <php as the signal to insert.

anibalsanchez avatar Jan 21 '19 09:01 anibalsanchez