首先让我们澄清一个误解:您示例中的字符不是“特殊”字符。它是 Unicode 代码点 U+2019,“右单引号”。它的 HTML 实体引用是’
. 它是一个普通字符——它恰好是一个在 ASCII 中没有表示的普通字符。在回答您的具体问题之前,我需要告诉您阅读Joel Spolsky 的文章“每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有借口!)”- 这正是它在锡上所说的,除非你至少吸收一点关于 Unicode 的知识,否则你将不断遇到这样的问题。不要太担心:每个人都会遇到这样的问题,直到他们学会如何处理文本。Unicode 并不“难”,因为它“容易暴露我们对文本如何工作的无意识假设”。†</p>
现在,回答你的问题。
如果我没看错的话,发生在您身上的是标题中包含非 ASCII 字符的帖子,例如’
当您搜索它们时没有显示get_post_by_title()
(看起来您正在使用类似于这个问题的公认答案- 是吗?)解决方案有两种途径:以更容易搜索的格式存储标题,或使用可以找到非 ASCII 字符的搜索方法。
以不同的方式存储标题需要您通过 PHP 的内置 htmlentities()函数运行它们,或者在将它们存储到您的 Wordpress DB 之前 - 您还需要确保转换没有与'\xNN'
表单等效的 HTML 实体的字符,并制作确保您的数据库的排序规则/字符集设置为 UTF-8 或其他支持 Unicode 的编码。这将是一笔不小的努力。‡</p>
使用不同的搜索方法不需要修补您的数据库或深入研究 WordPress 内部结构,但它确实需要非常小心地摆弄搜索字符串。您需要在搜索中使用您要查找的确切字符,'\xNN'
必要时将其表示为字符引用,或者在搜索中仔细使用通配符。
不管怎样,祝你好运。如果您的更多代码可见,则可以提供更具体的建议。
†:顺便说一句,如果您使用比 PHP 更好的语言和比 MySQL 更好的数据库,那么您在 Unicode 方面的生活也会变得更加轻松。WordPress 与 PHP 和 MySQL 有着千丝万缕的联系:PHP 和 MySQL 在正确处理 Unicode 问题方面都非常糟糕、可怕、非常糟糕。如果您将 PHP 和 MySQL 从中剔除,您作为程序员的生活将会变得更好。
‡:说真的,PHP 在这方面做得非常糟糕,而MySQL 正处于摸索的状态。避开他们。