SANITIZE_TITLE是否足以生成开机自检插件?

时间:2011-07-06 作者:a_fan

我想为一些字符串生成slug,而不需要经历WordPress slug生成流。因此,我想知道它调用了哪些函数来获得一个整洁的slug。我尝试了sanitize\\u title(),但结果为%c2%a0。

4 个回复
最合适的回答,由SO网友:Scott 整理而成

你就快到了。您需要的功能是sanitize_title_with_dashes( $title )

SO网友:Jules

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() 不会删除特殊字符。

SO网友:websupporter

嗯,已经有了一个答案,但我想把它扩大一点,所以我的发现如下:

如果我们进去看看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() 似乎已经足够了。

SO网友:Brett

除了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-_

正如你所看到的,它们是完全一样的。因此,它们之间的唯一区别是,一个编码重音宪章,而另一个替换重音宪章。

结束

相关推荐

Yoast SEO突破性媒体上传

我有一个非常简单的网站,我修改了非常小的数量。在安装Yoast SEO插件后,我发现它破坏了后期媒体连接/上传。我大约有80%确定它与Jquery相关,但我找不到任何与它相关的东西。我尝试从函数中强制排队。php,但它没有帮助。如有任何帮助,将不胜感激。function my_init_method() { wp_deregister_script( \'jquery\' ); wp_register_script( \'jquery\', \'http://ajax.go