Answers:
你快到了。您需要的功能是sanitize_title_with_dashes($ title)
èäç
将在此功能中保持不变。
sanitize_title_with_dashes
以及sanitize_title
留下一些可能破坏某些系统的特殊字符。我想要一种更通用的减少字符串的方法来看看sanitize_html_class
好了,已经有了一个答案,但是我想对其进行扩展,所以这是我的发现:
如果我们看一下,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()
似乎就足够了。
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()
不会删除特殊字符。
除了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-_
因此,您可以看到它们完全相同。因此,它们之间的唯一区别似乎是,其中一个编码带重音的宪章,而另一种代替它们。