我想为一些字符串生成slug,而不需要经历WordPress slug生成流。因此,我想知道它调用了哪些函数来获得一个整洁的slug。我尝试了sanitize\\u title(),但结果为%c2%a0。
SANITIZE_TITLE是否足以生成开机自检插件?
你就快到了。您需要的功能是sanitize_title_with_dashes( $title )
sanitize_title()
似乎是你唯一需要的。
在wp中包括/默认过滤器。php第211行您将发现:
add_filter( \'sanitize_title\', \'sanitize_title_with_dashes\', 10, 3);
这意味着sanitize_title()
将首先删除所有特殊字符,然后应用sanitize_title
筛选器,因此调用sanitize_title_with_dashes()
正如@JHoffmann所指出的,只需打电话sanitize_title_with_dashes()
不会删除特殊字符。
嗯,已经有了一个答案,但我想把它扩大一点,所以我的发现如下:
如果我们进去看看wp_insert_post()
我们看到$post_name
使用进行消毒wp_sanitize_title()
(参见wp-includes/post.php
)
在函数中sanitize_title()
我们有一个过滤器sanitize_title
. 这很有趣,因为在默认过滤器中sanitize_title_with_dashes()
连接到此过滤器(请参阅wp-includes/default-filters.php
).
<?php
echo sanitize_title( \'Â+ÄÖßáèäç\' ) // aaeoessaeaec
?>
我尝试了sanitize\\u title(),但结果为%c2%a0。这听起来很奇怪。知道输入值会很好,但是wp_insert_post()
sanitize_title()
似乎已经足够了。
除了websupporter的answer 我发现如下:
根据您的使用情况,它将取决于您需要什么。
sanitize_title()
正如上面所说:
删除重音符号(用非重音符号替换重音符号)
。。。和sanitize_title_with_dashes
表示:
请注意does not replace special accented characters
因此,使用这个示例字符串:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\\/\\\'"<>?``~ èäç
sanitize_title()
结果:
aa-o-sa-%20 oo pp-\\u-eac
如您所见,它已将重音字符替换为其非重音等效字符and 它删除了除%
它后面跟一个数字,但当它后面跟一个字母时,你会看到它被删除了;也许这是因为它认为already encoded. 尝试插入时强制执行此操作%c3
放进你的绳子里,它不会把它撕成碎片%c3
是有效的编码序列。
sanitize_title_with_dashes
结果:
%c3%a2%c3%a4-%c3%b6-%c3%9f%c3%a1-%20 oo pp-\\u-%c3%a8%c3%a4%c3%a7
因此,正如您所看到的,它并没有删除重音字符,而是对它们进行了编码。
现在让我们看一个没有重音字符的字符串,看看它们的行为。。。
Example String: %%% building %20 oo %pp + -_^^#@!**()=[]|\\/\\\'"<>?``~\'
sanitize_title()
结果:
建筑-%20 oo pp-_
sanitize_title_with_dashes
结果:
建筑-%20 oo pp-_
正如你所看到的,它们是完全一样的。因此,它们之间的唯一区别是,一个编码重音宪章,而另一个替换重音宪章。