删除智能引号和其他非代码字符

时间:2016-11-17 08:27:19

标签: php

我需要在我的WordPress网站上运行一行代码,但它包含许多非法的代码。字符。我可以抓住聪明的报价,但是因为害怕它会造成一些严重的 - 永久性的损害而犹豫不决!

function maybe_unserialize( $original ) {
    if ( is_serialized( $original ) ) // don’t attempt to unserialize data that wasn’t serialized going in
    {
        $original = preg_replace(‘!s:(\d+):”(.*?)”;!se’, “‘s:’.strlen(‘$2′).’:\”$2\”;'”, $original);
        return @unserialize( $original );
    }
    return $original;
}

特别是,我不知道第4行的'

有什么地方我可以去除这些字符并替换它们吗?

1 个答案:

答案 0 :(得分:0)

如果您正在运行类Unix系统,我建议使用sed命令。假设项目的根目录是$PROJECT_DIR,文件系统布局是:

$PROJECT_DIR
└── A
    ├── 1.php
    └── B
        └── 2.php

然后您可以运行以下命令:

find "$PROJECT_DIR" -type f -name '*.php' -exec sed -i.backup \
  -e "s/‘/'/g; s/”/\"/g; s/“/\"/g; s/’/'/g; s/′/'/g" {} \+

该命令使用ASCII单引号和双引号替换“智能”引号。旧文件以.backup前缀保存:

$PROJECT_DIR
└── A
    ├── 1.php
    ├── 1.php.backup
    └── B
        ├── 2.php
        └── 2.php.backup

然后,您将能够使用find命令回滚更改:

find "$PROJECT_DIR" -type f -name '*.php.backup' \
  -exec bash -c 'mv -f "$0" "${0%.backup}"' {} \;

以下命令验证树中所有*.php文件的PHP语法:

find "$PROJECT_DIR" -type f -name '*.php' -exec php -l {}  \;

示例输出

No syntax errors detected in ./A/1.php
No syntax errors detected in ./A/B/2.php