You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则表达式为含多层括号的htmlspecialchars添加空字符串回退

问题描述

要修复向htmlspecialchars函数传递null变量导致的错误,需要给函数参数添加空字符串回退 ?? ''。但现有正则仅能匹配单层括号的函数调用,现需编写可匹配多层嵌套括号的htmlspecialchars调用的正则,在函数自身的最后一个括号前插入 ?? ''。

输入示例:

htmlspecialchars($var)?>" />
htmlspecialchars(date('m/d/Y'))?>" /></td>
htmlspecialchars(json_encode($config))?>" />
htmlspecialchars(addslashes(get_office_name($office_id))) . "'); ";

期望输出:

htmlspecialchars($var ?? '')?>" />
htmlspecialchars(date('m/d/Y') ?? '')?>" /></td>
htmlspecialchars(json_encode($config) ?? '')?>" />
htmlspecialchars(addslashes(get_office_name($office_id)) ?? '') . "'); ";
正则表达式及替换方案

使用支持递归匹配的正则即可处理多层嵌套括号的场景,具体如下:

正则表达式

/(htmlspecialchars\()((?:[^()]|(?R))*?)(\))/

替换模板

$1$2 ?? ''$3

正则逻辑说明

  • htmlspecialchars\():精准匹配htmlspecialchars(的函数起始部分
  • ((?:[^()]|(?R))*?):核心递归匹配段,负责捕获括号内所有内容(含嵌套括号):
    • [^()]:匹配非括号的普通字符
    • (?R):递归调用整个正则,处理嵌套的括号结构
    • *?:非贪婪匹配,确保仅匹配当前htmlspecialchars函数的结束括号
  • (\)):匹配htmlspecialchars函数的结束括号

替换时将捕获的起始段、括号内内容、结束段重新拼接,中间插入 ?? '',就能实现需求。

内容的提问来源于stack exchange,提问作者Dennis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:35:28