探しているものに似た回答が見つかりましたが、私の問題を完全に解決するものではありません。
ユーザーがマイ ページのリンクをクリックすると、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;
自分で試してみてください -
とはまったく異なる結果を返します。
https://www.googleapis.com/books/v1/volumes?q=intitle:Its+Not_About+The+Bike+inauthor:ランス+アームストロング
文字列を urlencode すれば問題は解決すると思うかもしれません。しかし、そうではありません。それでも、私がこれを行うとき、私が理解できない理由で:
$google_endpoint_a = 'https://www.googleapis.com/books/v1/volumes?q=intitle:' . urlencode($bookTitle) . '+inauthor:' . urlencode($bookAuthor);
...GoogleAPI に渡されると urlencoding が取り除かれ、検索結果がゼロになります。
誰かがこれを乗り越えるのを手伝ってくれますか? 考えられることはすべて試しました。
ああ、これがおまけです。これは、文字列の最初の単語にアポストロフィが含まれている場合にのみ発生します。「It's Not About The Bike」や「Don't Blink」などの本のタイトルでも同じことが起こります。言い換えれば、アポストロフィは重要ではないようです。(たとえば、作家のビル・オライリーのように。)
アポストロフィが含まれている場合、文字列から最初の単語を削除する簡単な方法はありますか? それとももっと良い方法がありますか?
本当に醜い解決策:
したがって、PHP は urldecode() を介して $_GET 変数を渡します。醜いですが、誰かがより良い方法を考え出すことを願っていますが、問題を解決するために私がやったことは次のとおりです。
URL を介して変数を渡す前に、次のように、アポストロフィを意味不明な文字列に置き換えました。
$booktitle = str_replace("'", "W5x32RS97", $booktitle);
次に、これを実行しました:
$bookTitleTemp = $_GET('booktitle');
$bookTitle = str_replace("W5x32RS97", "'", $bookTitleTemp);
そして突然、すべてが機能します。しかし、もっと良い方法があるはずです。