WebLabyrinth site image

WebLabyrinthWebに関する様々なメモや個人的実験を行うサイトです

Navi box open

Shift_JIS環境で設置していたGoogleカスタム検索が動かなくなった時の対処例

昔設置したGoogleカスタム検索が気付いたら動かなくなってしまっていたので、修正しようとしたのですが、結構ハマってしまったので記事にしてみました。

気付いたら動かなくなっていたGoogleカスタム検索

結構昔に構築したサイトの中に、Googleカスタム検索を設置していたサイトがあったのですが、「検索が動かなくなってしまった」という連絡を受けたので調査をしてみました。

Googleの仕様変更後(?)Shift_JISで動作しなくなった模様?

当時制作したサイトはShift_JISで構築し、その環境内でGoogleカスタム検索も問題なく動いていました。その後、検索フォームまわりは弄っていないはずなのに突然動かなくなってしまったので色々試してみたら、マルチバイトで検索を掛けた場合に不具合が発生している事に気付きました。(半角英数文字での検索は、問題なく動作していましたので。)

似たような事例を見つける

Googleカスタム検索を使用する際の文字コードについて | Google 検索 ヘルプ フォーラム
https://productforums.google.com/forum/#!topic/websearch-ja/OeSCG4vSwKw

Gooleで色々検索していたら、似たような症状で困っている人からの質問が見つかりました。
上記フォーラムに投稿している日付から察するに、恐らくGoogleカスタム検索側で、最近仕様変更があったのではないかと推測されます。

早速フォーラムのソースを参考に修正を加えてみることにします。

修正前のソース(Googleカスタム検索 フォーム入力部分)

フォーラムを参考にした修正後のソース

ポイントは、パラメータのieを削除して、ブラウザの自動判別にしているところ?
あとは、oeパラメータ(検索結果の文字コード)を念のため追加しています。

フォーラムの事例通りでは改善されず・・・URLに渡される変数を注目してみることに

これで「やったか!?」と思いましたが、自分の調査しているサイトでは改善されませんでした。ほかにも何か原因があるのかと思いChromeのデベロッパーツールを開いたら、Uncaught URIError: URI malformed というエラーが出ていることに気付きました。

調べてみるとURLに含まれている文字列に不具合があるということらしいので、Googleカスタム検索へ渡されるURLの変数を見たところ、検索フォームに入力されたマルチバイト文字がうまく変換されていないことに気付きました。

例えばフォームから「あいうえお」と入力して検索を行うと、正常に動作するGoogleカスタム検索では、結果が表示されるページ側に送られるURLは以下のようになります。

しかし不具合の出ているGoogleカスタム検索ではこんな感じになっていました。

クエリーの文字列がURLエンコードされている状態ですね。
恐らくShift_JIS環境から送られた変数をGoogleのスクリプトを通したときに不具合が発生しているのかなと思ったので、以下の様な形で送信される情報の文字コードを固定してみることにしました。

フォームから送信する情報をUTF-8に固定したらうまくいった

変更した部分は form タグの部分で、accept-charset という属性を追加して、UTF-8として情報を送信するようにしています。
こうすることで、クエリーの文字列がGoogleカスタム検索側へ正確に渡され、エラーを吐き出さずに動作するようになりました。

異なるサービスで情報を受け渡しする場合は、文字コードを統一するのが理想的なのですが、昔作ったサイトで既に数百ページにも及ぶ場合は、修正するのも一苦労ですからね。応急処置ですがうまく行って良かったです。

Pocket

この記事を書いた人

ニックネーム: SHIBAZAKI
ブログ: https://weblabyrinth.net

北海道旭川市でweb関係のお仕事をしています。

Trackback URL

https://weblabyrinth.net/fixed-google-custom-search-of-shift_jis-environment/trackback/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください