我需要在我的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行的′
和'
。
有什么地方我可以去除这些字符并替换它们吗?
答案 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