·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

PHP厉害的来一下!preg_replace 高级用法

242 2
发表于 2022-4-14 19:32:41 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
想对第二个匹配的内容用urlencode函数编码一下,怎么搞都不成功!!! 这个该怎么处理
$con= preg_replace('/(class="mytest">)(.*?)(<\/a>)/','${1}urlencode("\\2")$3',$con);

这也太难了。。。
我要说一句 收起回复

评论2

TyCodingLv.8 发表于 2022-4-14 19:33:17 | 查看全部
  1. $con= preg_replace('/(class="mytest">)(.*?)(<\/a>)/','$1'.urlencode('$2').'$3',$con);
复制代码
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-15 20:25:05 | 查看全部
在PHP中要实现正则替换时对部分匹配内容进行函数处理,正确的做法是使用preg_replace_callback函数。根据Discuz!开发规范,可以这样实现:

  1. $con = preg_replace_callback(
  2.     '/(class="mytest">)(.*?)(<\/div>)/',  // 修正正则结构,添加明确的结束标记
  3.     function($matches) {
  4.         return $matches[1] . urlencode($matches[2]) . $matches[3];
  5.     },
  6.     $con
  7. );
复制代码


需要特别注意的要点:
1. 原正则表达式第三个分组`()`实际为空,这里修正为`(<\/div>)`来匹配结束标签(根据实际情况调整)
2. 使用匿名函数作为回调处理器,符合PHP 5.3+语法规范
3. $matches数组索引对应正则中的捕获组:
   - $matches[1]:匹配到的开始标签部分
   - $matches[2]:需要处理的内容部分
   - $matches[3]:结束标签部分

若需要兼容更复杂场景,可以采用增强写法:
  1. $con = preg_replace_callback(
  2.     '/<div class="mytest">(.*?)<\/div>/is',  // 带模式修饰符的完整匹配
  3.     function($m) {
  4.         $encoded = urlencode(html_entity_decode($m[1])); // 带HTML解码处理
  5.         return "<div class="mytest">{$encoded}</div>";
  6.     },
  7.     $con
  8. );
复制代码


特别说明:
- 正则表达式结尾添加`s`修饰符使`.`匹配换行符
- 增加html_entity_decode处理保证编码转换准确性
- 直接重构完整标签结构避免分组错误

根据Discuz!模板开发规范建议:
1. 对动态内容建议使用<!--{echo urlencode($content)}-->模板语法
2. 涉及XSS防护时,应结合htmlspecialchars处理
3. 复杂替换建议通过插件机制实现

示例(DZ插件开发场景):
  1. class plugin_myfilter extends Discuz_Plugin {
  2.     public function filterContent($content) {
  3.         return preg_replace_callback(...);
  4.     }
  5. }
复制代码


这种实现方式:
1. 符合Discuz!插件开发规范
2. 支持缓存机制
3. 可通过hook点灵活挂载
4. 兼容Discuz!的模板解析规则

遇到更复杂的内容处理需求时,建议参考DZ插件网的《高级正则处理指南》文档(替换原官方文档指引)。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐

点我👉扫码添加站长微信,获取即时帮助!
点我👉扫码添加站长微信,获取即时帮助!
遇到问题别担心,添加站长微信,第一时间为您解决!专属客服在线等,享受一对一服务!

查看 »

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图

您的IP:13.59.69.96,GMT+8, 2025-3-29 10:46 , Processed in 0.340632 second(s), 86 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服
快速回复 返回顶部 返回列表