Wordpress the_title()给出与数据库中的ASCII连字符不同的ASCII连字符?

时间:2014-02-15 11:49:28

标签: php wordpress

我注意到我的疑问出现了问题时,我发现了这一点。似乎Wordpress用ASCII码8211回应连字符,存储在数据库中的连字符的ASCII码为45.

这对我造成了问题,因为我的网站允许访问者在他们的session / meta中“点击保存”帖子标题,然后由数据库运行它以查看它的帖子类型,以及它在DB中一无所获。

有谁知道这个的原因?我如何解析字符串以替换8211连字符与the_title()上的45连字符?

1 个答案:

答案 0 :(得分:2)

默认情况下,WordPress会通过wptexturize过滤所有帖子的标题和正文。在其他印刷细节中,这将各种标准ASCII连字符序列转换成适当的短划线,例如, “ - ”转换为em-dash

wptexturize由WordPress通过过滤器the_titlethe_content运行。您可以删除它 - 代码改编自this answer - 例如:

remove_filter( 'the_title', 'wptexturize' );

...在您的主题functions.php中说,或者来自插件代码。

但是,我建议这会(a)让你的标题看起来不那么好(你会丢失聪明的引号,漂亮的破折号等),以及(b)不是非常适合未来的。如果其他东西开始过滤你的标题 - 一个新的插件,一个不同的主题 - 那么你将回来与数据库不匹配。

因此,我的方法是调整现有代码以使用帖子ID而不是标题。这是一个整数,永远不会改变,永远不会被过滤,并且在数据库中查找会更快(不仅因为它是一个整数,还因为它上面有一个唯一的索引。)