0

我正在使用 Topsy,它返回我网站上排名最高的文章的标题,它返回一个 RSS 文件,其中包含带有链接的帖子标题。现在我只取帖子名称并使用帖子标题我尝试使用以下函数在 mysql 数据库中搜索:

get_post_by_title($postTitle,'post');

但问题是 topsy 返回我的帖子标题,但它还在 RSS 文件中添加了一些特殊字符,如“'”替换为“'”这个字符。因为这个get_post_by_title()函数不会按标题名称返回我的帖子。

编辑:它返回给我一个这样的帖子标题:

iPad Applications In Bloom’s Taxonomy NEXT

这里单引号是特殊字符。

请帮我。谢谢

4

3 回答 3

0

首先让我们澄清一个误解:您示例中的字符不是“特殊”字符。它是 Unicode 代码点 U+2019,“右单引号”。它的 HTML 实体引用是&rsquo;. 它是一个普通字符——它恰好是一个在 ASCII 中没有表示的普通字符。在回答您的具体问题之前,我需要告诉您阅读Joel Spolsky 的文章“每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有借口!)”- 这正是它在锡上所说的,除非你至少吸收一点关于 Unicode 的知识,否则你将不断遇到这样的问题。不要太担心:每个人都会遇到这样的问题,直到他们学会如何处理文本。Unicode 并不“难”,因为它“容易暴露我们对文本如何工作的无意识假设”。†</p>

现在,回答你的问题。

如果我没看错的话,发生在您身上的是标题中包含非 ASCII 字符的帖子,例如&rsquo;当您搜索它们时没有显示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 正处于摸索的状态。避开他们。

于 2012-08-10T17:30:59.473 回答
0

从 wp-config.php 中删除

//define('DB_CHARSET', 'utf8');

//define('DB_COLLATE','utf8_unicode_ci');

于 2017-04-07T09:19:22.367 回答
-1

您可以使用 preg_replace 轻松删除特殊字符,请参阅这篇文章 -> http://code-tricks.com/filter-non-ascii-characters-using-php/

于 2012-08-10T09:31:31.243 回答