
本文介绍一种简洁可靠的 php 方法,通过定位省略号(…)位置截断字符串,精准提取标题中作者信息前的主体文本,避免正则误匹配与数组拆分带来的复杂性。
本文介绍一种简洁可靠的 php 方法,通过定位省略号(…)位置截断字符串,精准提取标题中作者信息前的主体文本,避免正则误匹配与数组拆分带来的复杂性。
在 WordPress 或其他 PHP 项目中,常遇到类似这样的标题格式:
It's no use going back to yesterday, because at that time I was... Lewis Carroll
或
The phrase... (author).
目标很明确:仅保留省略号(...)之前的部分作为纯净标题,剔除后续的作者名、括号、标点等冗余内容。
✅ 推荐方案:使用 strrpos() + substr()(安全、高效、无正则陷阱)
虽然正则表达式看似灵活,但 . 在正则中是特殊元字符,直接写 '...' 会导致匹配任意三个字符(如 was... 中的 was),而非字面意义的三个英文句点。若强行使用 preg_match,必须调用 preg_quote('...', '/') 转义,反而增加复杂度。
更优解是——将省略号视为固定字面字符串,从右向左查找其最后一次出现的位置(因标题中作者信息总在末尾,且省略号唯一标识分割点):
function getPlainTitle(string $title): string
{
$ellipsisPos = strrpos($title, '...');
// 若未找到省略号,返回原字符串;否则截取至该位置前
return $ellipsisPos === false ? $title : substr($title, 0, $ellipsisPos);
}
// 示例调用
$title = "Always is: The phrase... (author).";
echo getPlainTitle($title); // 输出:Always is: The phrase
⚠️ 关键注意事项
- strrpos() 比 strpos() 更可靠:确保匹配的是最后一个 ...(防止标题正文内偶然出现 ... 导致误截断);
-
严格区分 ... 与 Unicode 省略号 …(U+2026):浏览器可能提交后者,而 PHP 字符串中若未统一编码(UTF-8),strrpos($title, '…') 才能正确识别。建议先标准化输入:
$title = mb_convert_encoding($title, 'UTF-8', 'auto'); $ellipsisPos = mb_strrpos($title, '…'); // 或 '...',依实际数据而定
- 避免 explode(' ', $title) 拆词处理:空格分割会破坏带空格的短语(如 "at that time"),且无法准确定位 ... 所在词——$title_array[8] 是不可靠的硬编码索引,极易失效;
-
WordPress 环境下直接使用:该函数可安全集成于主题 functions.php 或自定义插件中,例如:
add_filter('the_title', function($title) { return getPlainTitle($title); });
✅ 总结
无需正则、不依赖数组索引、不假设空格结构——仅用两行核心逻辑即可鲁棒地剥离作者后缀。这是处理此类“省略号分隔标题”的最佳实践:以字面量精确匹配为前提,以字符串位置操作为手段,以语义完整性为结果。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











