
本文介绍一种简洁可靠的 php 方法,通过定位字符串末尾的省略号(…)来截取标题主体,去除作者信息等冗余内容,适用于 wordpress 等 cms 中批量清洗标题的场景。
本文介绍一种简洁可靠的 php 方法,通过定位字符串末尾的省略号(…)来截取标题主体,去除作者信息等冗余内容,适用于 wordpress 等 cms 中批量清洗标题的场景。
在实际网站开发中(尤其是基于 WordPress 的文学类或引文展示站点),常遇到类似这样的标题格式:
It's no use going back to yesterday, because at that time I was... Lewis Carroll
或
The phrase... (author).
其共同特征是:省略号(...)作为语义分隔符,之后的内容(作者名、括号说明等)不属于标题主体。目标很明确——仅保留省略号之前的部分,并确保结果干净、无多余空格。
✅ 推荐方案:使用 strrpos() + substr()(非正则,更安全高效)
相比正则表达式,直接使用原生字符串函数更轻量、更易读,且避免了正则元字符(如 .)需转义的陷阱(例如未用 preg_quote() 会导致 ... 被误解析为“任意三字符”模式)。
function getPlainTitle(string $title): string
{
$rpos = strrpos($title, '...');
// 若未找到省略号,返回原字符串;否则截取至省略号起始位置前
return ($rpos === false) ? $title : trim(substr($title, 0, $rpos));
}
// 示例调用
$title = "Always is: The phrase... (author).";
echo getPlainTitle($title); // 输出:Always is: The phrase
? 为什么用 strrpos() 而非 strpos()?
因为标题中可能出现多次 .(如英文缩写 Mr. 或 U.S.A.),而 strrpos() 从右向左查找,能精准定位最后一个 ... —— 这正是语义分隔点,符合业务逻辑。
⚠️ 注意事项与边界处理
-
省略号编码一致性:确保输入标题中的省略号是 ASCII 三个句点 ...(U+002E ×3),而非 Unicode 水平省略号 …(U+2026)。若存在后者,需统一替换:
$title = str_replace('…', '...', $title); - 空格清理:trim() 可消除截取后可能残留的尾部空格,提升健壮性。
-
WordPress 集成示例:
// 在主题 functions.php 或自定义插件中 add_filter('the_title', function($title, $id) { if (is_single() || is_archive()) { return getPlainTitle($title); } return $title; }, 10, 2);
❌ 常见误区提醒
- array_key_exists("/{$search}/i", $title_array) 是错误用法:该函数用于检查键名是否存在,而非搜索值;且正则模式不能作为数组键传入。
- explode(' ', $title) 拆词再匹配不可靠:省略号可能紧贴前词(如 phrase...),导致无法独立匹配;且作者名含空格时逻辑崩溃。
综上,strrpos() 方案简洁、高效、可维护性强,是处理此类「省略号截断」需求的首选实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











