sanitize_title足以生成帖子吗?


16

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

Answers:


27

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


1
尽管这肯定是正确的,但我不清楚sanitize_title_with_dashes似乎与sanitize_title有何不同。sanitize_title还在空格处添加了破折号...
蒂姆·马隆(

7
如果检查WordPress Codex的sanitize_title_with_dashes($ title),则会看到注释“它不会替代特殊的重音字符”,这意味着诸如此类的字符èäç将在此功能中保持不变
JHoffmann

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

2

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

如果我们看一下,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()似乎就足够了。


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

0

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.