
本文介绍如何将形如 `[user1@example.com][user2@example.com]` 的 php 字符串解析为独立邮箱 html 片段,并动态生成 `
在实际开发中,我们有时会接收到一种特殊格式的邮箱字符串——多个邮箱被方括号 [] 包裹并连续拼接(如 [[email protected]][[email protected]])。目标是将其拆解为独立的 HTML 链接片段,并作为
✅ 正确解析步骤
首先需清除冗余符号:用 str_replace() 逐层替换掉起始 [、结束 ] 和连接符 ][(替换为空格更利于后续分割):
$emails = "[[email protected]][[email protected]][[email protected]]"; // 清洗:将 ][ → 空格,再移除所有 [ 和 ] $emails_prepared = str_replace(']', '', str_replace('[', '', str_replace('][', ' ', $emails)));
接着使用 explode(' ', ...) 拆分为数组(注意:若原始字符串末尾有空格或存在连续空格,建议加 array_filter() 去除空元素):
$emails_array = array_filter(explode(' ', $emails_prepared), 'strlen');最后在 HTML 中安全遍历输出。⚠️ 注意:原答案中 缺少 echo,会导致内容不显示;同时应避免 XSS 风险——由于 value 中包含 HTML 标签,且来源可控(即该字符串本就是预期含 的),可直接输出,但务必确保 $email 不含未转义的恶意脚本(Cloudflare 邮箱保护本身已做混淆,风险较低):
立即学习“前端免费学习笔记(深入)”;
? 补充说明:htmlspecialchars() 对 value 属性进行基础转义,防止引号截断;strip_tags() 提取纯邮箱文本用于 可视内容,兼顾功能与用户体验。
✅ 最佳实践建议
- 若数据来自不可信来源,强烈建议结合正则提取真实邮箱地址(如 /(?:href="https://www.php.cn/link/560f8f4b1f6a8f9b982c7ac33ffe30e1"]*">)(https://www.php.cn/link/560f8f4b1f6a8f9b982c7ac33ffe30e1/),而非直接复用 HTML 片段;
- 使用 preg_split() 替代多层 str_replace() 可提升可维护性,例如:preg_split('/\]\[/u', trim($emails, '[]'));
- 在现代 PHP 项目中,推荐封装为函数或使用 DOMDocument 解析 HTML,确保结构健壮性。
通过以上方法,即可稳健、清晰地完成从标记化字符串到交互式表单的转换。











