#1 楼
你快到了。您需要的功能是sanitize_title_with_dashes($ title)#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_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_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-_
因此您可以看到它们完全一样因此,它们之间的唯一区别似乎是,其中一个编码带重音符号的宪章,而另一个则代替它们。
评论
尽管这绝对是正确的,但我不清楚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