如何在 PHP 中解析带方括号包裹的邮箱字符串并生成 HTML 下拉选项

本文讲解如何将形如 `[https://www.php.cn/link/263b1243ca2dbeb358777ceabc4a2e4c@https://www./link/263b1243ca2dbeb358777ceabc4a2e4c][https://www./link/263b1243ca2dbeb358777ceabc4a2e4c@https://www./link/263b1243ca2dbeb358777ceabc4a2e4c]` 的字符串安全拆分为独立邮箱 html 片段,并动态生成 `

在实际开发中,我们常遇到从第三方系统或旧数据中获取的格式化字符串——例如用方括号 [] 包裹多个 HTML 邮箱链接(常见于 Cloudflare 邮箱保护输出)。要将其用于

✅ 正确的字符串预处理步骤

原始字符串含嵌套 HTML 和连续分隔符 ][,不能简单按 [ 或 ] 切割(易破坏内部结构)。推荐三步清洗:

  1. 将 ][ 替换为统一分隔符(如空格)——避免误切 href="https://www./link/263b1243ca2dbeb358777ceabc4a2e4c" 中的 ];
  2. 移除开头的 [ 和结尾的 ];
  3. 按空格分割,得到干净的邮箱 HTML 数组。
$emails = "[[email protected]][[email protected]][[email protected]]";

// 三步清洗:先替换分隔符,再清除首尾括号
$emails_prepared = str_replace(']', '', str_replace('[', '', str_replace('][', ' ', $emails)));
// → 得到:" [email protected] [email protected] [email protected] "

$emails_array = array_filter( // 过滤空元素(防首尾空格导致空项)
    explode(' ', trim($emails_prepared)),
    'strlen'
);
⚠️ 注意事项:必须使用 trim() + array_filter(https://www./link/263b1243ca2dbeb358777ceabc4a2e4c, 'strlen'),否则 explode() 可能产生空字符串项;若原始字符串含多余空格或换行,建议额外调用 preg_replace('/\s+/', ' ', https://www./link/263b1243ca2dbeb358777ceabc4a2e4c) 统一空白符;data-cfemail 属性含特殊字符,但作为 HTML 属性值无需额外转义(PHP 直接输出即可)。

✅ 安全渲染 HTML 表单

在模板中遍历数组时,务必对 value 属性内容进行 HTML 属性转义(尽管本例中内容本身是合法 HTML,但为防意外注入,推荐使用 htmlspecialchars()):

? 提示:strip_tags($email) 可提取 标签内的纯文本邮箱(如 [email protected]),提升用户体验;若需保留链接样式,可改为 html

_entity_decode(strip_tags($email)) 处理 HTML 实体。

✅ 总结

该方案不依赖正则(避免复杂匹配风险),兼容任意数量邮箱,且完全保持原始 HTML 结构完整性。核心逻辑简洁可靠:
][ → 空格 → 清括号 → 分割 → 过滤 → 渲染
适用于 CMS 导出、邮件模板解析等场景,是处理此类“伪结构化字符串”的典型实践。