我想为某些字符串生成子弹,而无需经历WordPress子弹的生成流程。因此,我想知道为获得整洁的弹头而调用的函数。我尝试了sanitize_title(),但结果中留有%c2%a0。

#1 楼

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

评论


尽管这绝对是正确的,但我不清楚sanitize_title_with_dashes与sanitize_title有何不同。 sanitize_title还在空白处添加破折号...

–蒂姆·马隆(Tim Malone)
15年7月24日在2:31

如果检查WordPress Codex中的sanitize_title_with_dashes($ title),您会看到注释“它不会替代特殊的带重音符号的字符”,这意味着èäç等字符将保留在该功能中。

– JHoffmann
15年8月26日在8:43

请注意,sanitize_title_with_dashes和sanitize_title留下了一些特殊字符,可能会破坏某些系统。我想要一种更通用的减少字符串的方法,看看sanitize_html_class

– GDY
19-2-27在15:01



#2 楼

sanitize_title()似乎是您唯一需要的一个。

在wp-includes / default-filters.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()不会删除特殊字符。

评论


这应该是正确的答案

–bysanchy
18年7月23日在8:14

#3 楼

好了,已经有了一个答案,但是我想对其进行扩展,所以这是我的发现:

如果我们看一下wp_insert_post(),就会看到,使用$post_namewp_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_title()但它留下了%结果中为c2%a0。


这听起来很奇怪。知道输入值会很好,但是跟随wp_insert_post() sanitize_title()似乎足够。

#4 楼

除了websupporter的好答案外,我还发现了以下内容:

取决于您的使用情况,还取决于您的需要。

sanitize_title()如其所说:


重音符号被删除(重音符号被非重音符号替换)


...并且sanitize_title_with_dashes说:


请注意,它不会替换特殊的重音字符


因此,使用此示例字符串:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç

sanitize_title()结果:


aa-o-sa-%20-oo-pp -_- eac


如您所见,它已将带重音符号的字符替换为它们的非重音符号,并删除了所有除%后跟一个数字外,还有其他非字母数字字符,但是当它后面接一个字母时,您会看到它已被删除;也许是因为它认为它已经被编码了。当您尝试将%c3插入字符串时会强制执行此操作,因为%c3是有效的编码序列,因此不会删除它。

sanitize_title_with_dashes结果:


% c3%a2%c3%a4-%c3%b6-%c3%9f%c3%a1-%20-oo-pp -_-%c3%a8%c3%a4%c3%a7


因此您可以看到它并没有除去重音字符,而是对其进行了编码。

现在让我们看一个没有重音字符的字符串,以查看它们的表现方式...

示例字符串:%%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'

sanitize_title()结果:


building-%20-oo-pp-_


sanitize_title_with_dashes结果:


building-%20-oo-pp-_


因此您可以看到它们完全一样因此,它们之间的唯一区别似乎是,其中一个编码带重音符号的宪章,而另一个则代替它们。