我找到了与我正在寻找的答案相似的答案,但不是完全解决我的问题的答案。
用户单击我页面上的链接,该链接将他们带到 Google 图书并进行搜索。但是,如果书名中的第一个单词包含缩略语,那么一切都会被抛弃,我的更正似乎都不起作用。
示例:我页面上的链接如下所示:
mysite.com/book-search?bookauthor=Lance Armstrong&booktitle=It's Not About the Bike
但是,当我运行这个时:
$bookTitle = $_GET['booktitle']
我得到了相同的标题,但删除了“It's”中的撇号。这足以完全摆脱 Google 图书搜索并且不返回任何结果。
执行搜索的 cURL 会话中的端点如下所示:
https://www.googleapis.com/books/v1/volumes?q=intitle:' . $bookTitle . '+inauthor:' . $bookAuthor;
自己试试——
返回完全不同的结果
你会认为,如果我对字符串进行 urlencoded,就可以解决问题。但事实并非如此。尽管如此,由于我无法理解的原因,当我这样做时:
$google_endpoint_a = 'https://www.googleapis.com/books/v1/volumes?q=intitle:' . urlencode($bookTitle) . '+inauthor:' . urlencode($bookAuthor);
...当将 urlencoding 传递给 GoogleAPI 时,它会被剥离,我再次得到零结果搜索。
有人可以帮我解决这个问题吗?我已经尝试了我能想到的一切。
哦 - 这是奖励- 只有当字符串中的第一个单词包含撇号时才会发生这种情况。所以它发生在像“这不是关于自行车”和“不要眨眼”这样的书名上。换句话说,撇号似乎并不重要。(例如,作者比尔·奥莱利(Bill O'Reilly)。)
如果字符串中包含撇号,是否有一种简单的方法可以从字符串中删除第一个单词?或者,还有更好的方法?
真正丑陋的解决方案:
所以 PHP 通过 urldecode() 传递 $_GET 变量。因此,即使它很丑陋,这就是我最终解决问题的方法,尽管我希望有人会想出更好的方法。
在通过 URL 传递变量之前,我将撇号替换为一串乱码,如下所示:
$booktitle = str_replace("'", "W5x32RS97", $booktitle);
然后运行这个:
$bookTitleTemp = $_GET('booktitle');
$bookTitle = str_replace("W5x32RS97", "'", $bookTitleTemp);
突然间,一切正常。但是必须有更好的方法。