当前位置:  开发笔记 > 编程语言 > 正文

用<?php替换PHP短开标签的批处理脚本

如何解决《用<?php替换PHP短开标签的批处理脚本》经验,为你挑选了3个好方法。

我有很多年来编写的大量php文件,我需要将所有短开标签正确替换为正确的显式开放标签.

change "

我认为这个正则表达式将正确选择它们:

<\?(\s|\n|\t|[^a-zA-Z])

照顾像这样的案件



但我不知道如何处理整个文件夹树并检测.php文件扩展名并应用正则表达式并在文件更改后保存.

如果你掌握了正确的工具,我觉得这可以非常简单.(sed手册中有一个有趣的黑客:4.3示例/将文件重命名为小写).

也许我错了.
或许这可能是一个oneliner?



1> ax...:

不要使用正则表达式来解析正式语言 - 你总会遇到你没想到的干草堆.喜欢:

 now what? 

使用知道语言结构的处理器更安全.对于html,这将是一个xml处理器; 对于php,内置的tokenizer扩展.它有T_OPEN_TAG解析器令牌,匹配,<%,和T_OPEN_TAG_WITH_ECHO,匹配<%=.替换所有短开的标签,你会发现所有这些令牌和更换T_OPEN_TAG,并T_OPEN_TAG_WITH_ECHO.

实施留给读者的练习:)

编辑1:指挥官是如此善良提供一个.

编辑2:与系统short_open_tag中关闭了php.ini,,<%,并不会被替代脚本的认可.要使脚本在此类系统上运行,请short_open_tag通过命令行选项启用:

php -d short_open_tag=On short_open_tag_replacement_script.php

ps token_get_all()的手册页和googleing for tokenizer,token_get_all和解析器令牌名称的创意组合可能有所帮助.

pps还看到Regex解析define()内容,可能吗?在这里


@Polypheme:<?xml version ="1.0"encoding ="UTF-8"?>

2> ringmaster..:

如果您使用的是tokenizer选项,这可能会有所帮助:

$content = file_get_contents($file);
$tokens = token_get_all($content);
$output = '';

foreach($tokens as $token) {
 if(is_array($token)) {
  list($index, $code, $line) = $token;
  switch($index) {
   case T_OPEN_TAG_WITH_ECHO:
    $output .= '

请注意,如果未启用短标记,则标记生成器将无法正确标记短标记.也就是说,您无法在短标签不起作用的系统上运行此代码.您必须在其他地方运行它来转换代码.



3> hakre..:

作为 工具中的固定器,已经解决了该问题,该php-cs-fixer工具可以轻松安装并经过测试和维护。

然后修复很容易:

$ php-cs-fixer fix --fixers=short_tag --diff --dry-run 

只需替换为您要更改的目录或文件的路径即可。给定的命令是首先检查(--dry-run--diff参数)。

安装就像

$ composer global require friendsofphp/php-cs-fixer

如果您已经在路径中安装了composer并在全局composer bin目录中安装(推荐)。


最新版本的php-cs-fixer使用以下语法:```php-cs-fixer fix --rules = full_opening_tag --diff --dry-run .`''
推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有