移植WordPress的sanitize_title到Delphi:空格转短横线逻辑在哪?
问题:WordPress的sanitize_title函数空格转短横线的逻辑在哪里?
我尝试将WordPress中生成文章别名(slug)的sanitize_title函数移植到Delphi,查看其源码:
function sanitize_title( $title, $fallback_title = '', $context = 'save' ) { $raw_title = $title; if ( 'save' === $context ) { $title = remove_accents( $title ); } /** * Filters a sanitized title string. * * @since 1.2.0 * * @param string $title Sanitized title. * @param string $raw_title The title prior to sanitization. * @param string $context The context for which the title is being sanitized. */ $title = apply_filters( 'sanitize_title', $title, $raw_title, $context ); if ( '' === $title || false === $title ) { $title = $fallback_title; } return $title; }
发现源码中没有将空格替换为短横线的逻辑:remove_accents仅移除重音,与空格无关;apply_filters若无对应过滤器则无操作,想询问该转换逻辑在哪里?
解答
WordPress中sanitize_title本身只做了移除重音和触发过滤器的基础操作,空格转短横线等slug核心处理逻辑,是通过**sanitize_title过滤器挂载的默认回调函数sanitize_title_with_dashes**实现的。
在WordPress的默认初始化流程里,会自动将sanitize_title_with_dashes注册为sanitize_title过滤器的处理函数,所以只要没有自定义过滤器覆盖这个逻辑,调用sanitize_title时就会自动执行该函数的处理步骤,其中就包含空格转短横线的操作。
sanitize_title_with_dashes的核心处理逻辑包括:
- 将标题转换为小写
- 把空格、下划线、点号等字符替换为短横线
- 移除字母、数字、短横线之外的所有特殊字符
- 将连续的多个短横线压缩为单个
- 去除字符串开头和结尾的短横线
如果你要移植slug生成逻辑,需要把sanitize_title_with_dashes的逻辑也一并移植,而不只是sanitize_title函数本身。
内容的提问来源于stack exchange,提问作者alancc
相关产品推荐
相关产品推荐

