搜索并替换所有 php_short_tag 即 <?= 和 <?

Search and replace all php_short_tag that is <?= and <?

我不想在 php.ini 中打开 php_short_tag 的麻烦,而且我想使用 xml 而不会出现短标签可能引入的问题,所以我替换了每一次出现通过使用搜索和替换来搜索代码中的短标记。

我想我应该在这里分享它,因为我发现许多答案在我调整它们之前不起作用

  1. 首先搜索 <?= 并将其替换为 <?php 注意:确保 <?php 在它后面有一个 space 这样 <?=code 将是 <?php code 而不是 <?phpcode.

  2. 正则表达式是 <[?][\=](?!php),请查看 debuggex.com

  3. 然后搜索 <? 并将其替换为 <?php 注意:确保 <?php 在它后面有一个 space 这样 <?code 将是 <?php code 而不是 <?phpcode.

  4. 正则表达式是 <[?](?!php),请查看 debuggex.com

只需将 = 符号设为可选符号即可。

preg_replace('~<\?=?(?!php\b)~', '<?php ', $str);

preg_replace('~<\?=?(?!php\b)(\w)~', '<?php ', $str);

DEMO

请注意,<?= 符号模仿回声功能,所以我不得不更改我的更改,例如:

<?= __("Key") ?> 已更改为 <?php __("Key") ?>

这没有输出语言所以我用正则表达式取消了这个:

(?<=php)\ (?=__[(]) <?php __("Key") ?>变成了这个<?php echo __("Key") ?>