You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移植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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:03:28