
本文介绍一种简洁可靠的 php 方法,通过定位字符串末尾的省略号(…)来提取标题主体部分,自动剔除作者信息等冗余内容,无需正则匹配,兼容性强且性能高效。
本文介绍一种简洁可靠的 php 方法,通过定位字符串末尾的省略号(…)来提取标题主体部分,自动剔除作者信息等冗余内容,无需正则匹配,兼容性强且性能高效。
在 WordPress 或其他 PHP 项目中,常遇到类似这样的标题格式:
It's no use going back to yesterday, because at that time I was... Lewis Carroll
或
The phrase... (author).
目标很明确:仅保留省略号 ... 之前的内容,彻底移除其后所有字符(包括空格、括号、作者名、标点等)。虽然初看可用正则实现,但需注意:... 中的英文句点 . 是正则元字符,若直接用于 preg_match 或 preg_replace 必须转义;更关键的是,多数场景下我们并不需要正则的复杂能力——只需一次精准定位即可。
✅ 推荐方案:使用 strrpos() + substr() 组合
strrpos() 从字符串末尾向前查找指定子串最后一次出现的位置,天然适配“省略号作为分隔符”的语义(即使标题中多次出现 ...,我们也只关心最后一个,因其最可能标记正文结束)。配合 substr() 截取起始至该位置前的所有字符,即可安全剥离作者信息。
以下是可直接复用的函数:
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
⚠️ 注意事项:
- 避免 explode(' ', $title) 分词处理:标题含空格极多(如例句),分词后 ... 可能附带标点(如 '...' 或 "... "),导致 array_key_exists() 完全失效——该函数检查的是键名而非值,且不支持模糊匹配。
- 不要用未转义的正则匹配 ...:如 '/.../' 实际匹配任意三个字符,应写作 '/\.\.\./' 或更稳妥地使用 preg_quote('...', '/')。
- 浏览器输入的省略号可能是 Unicode 字符 …(U+2026):若前端录入不规范,PHP 接收的可能是 … 而非 ...。此时需扩展函数支持双模式:
function getPlainTitle(string $title): string {
// 优先匹配标准三个句点,再尝试 Unicode 省略号
foreach (['...', '…'] as $ellipsis) {
$pos = strrpos($title, $ellipsis);
if ($pos !== false) {
return trim(substr($title, 0, $pos));
}
}
return $title;
}
? 总结:面向明确分隔符(如 ...)的字符串截取,应优先选择原生字符串函数而非正则;strrpos() 的“反向查找”特性完美契合“取省略号前全部内容”的业务逻辑,代码简洁、执行高效、可读性强,是 WordPress 主题开发或内容清洗中的实用技巧。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











