MB-Support

パソコン初心者のサポートページ

サイトに設置された検索フォームの修正

 MB-Support 管理人の日記の仕様を変更しました。


前々からアマゾンの WEB サービスを利用しているページで、検索ワードに特定の文字が含まれていた場合、正しく検索されない問題がありました。 これはお友達に指摘されて気が付いたのですが、その時はどうにも対処方法が見つかりませんでした。 本来、なんらかの事情で検索できなかった場合、右画像の様に検索できなかった結果のページが表示される仕組みになっています。



ところが・・・ 知りえた範囲では、検索ワードに「ダ」や「ビ」が含まれると、空白のページが表示されていました(右画像)。 これは ホームページの作り方 php.iniの設定方法 で設定した、エラー表示を無効にしているためです。 当然ローカルではどんなエラーが発生しているのか分かり、エラーの内容は

1: parser error : Input is not proper UTF-8, indicate encoding ! と表示されていました。 アマゾンWEBサービスでは、REST で XML を取得しています。この URL は文字コードを UTF-8 に変換する必要があります。 例えば、検索ワードを$_GET[]で取得した場合、そのまま使うわけには行かないので、変数「$word」に格納します。

$word = htmlspecialchars($_GET[word]);
$word = stripslashes($word);

とすると思います。これを UTF-8 に変更して

$word = mb_convert_encoding("$word", "UTF-8","auto");

さらに日本語にキーワードが入力された事を考慮して(当然ですが・・・)

$word = urlencode($word);

とします。これは、例えば「シャーロックホームズ」を検索する場合、「%83V%83%83%81%5B%83%8D%83b%83N%83z%81%5B%83%80%83Y」と意味不明な文字列に変換します。 これをやらないと、XML は取得できません。後は REST の URL を作成して、その中に

&Keywords=".$name."

で埋め込めば完了なのですが、この状態で特定の検索ワードが入力されると、PHP5 から搭載された SimpleXML で XML を取得する行でエラーになります。 つまり・・・ URL が正しく無い事になります。 この原因が何なのかさっぱり分からないままにしていました。

いや、むしろ原因はURLが正しく無いと分かっているのですが、変数にURLを入力して print で吐き出し( print ("$url"); )、それをコピー&ペーストしてブラウザのアドレス欄に入力すると、確実に XML が取得できるのです。



まぁ〜エラーの内容では確実に検索ワードの文字コードかURLに含まれる文字コードが関係していると思われるので、最終手段で作成したURL全てを urlencode に変換してまいました。


$url = urlencode($url);
// XMLの読み込み
@$xml = simplexml_load_file("$url");
すると、以外にあっさり取得できました。 どうも 第 71章PHPとHTML この辺の知識が乏しかったようです。これにより、今まで取得できなかったソフトウェアの「ホームページビルダー」や、映画の「ダイハード」なども検索できる様になりました。 やはり・・・・基礎を勉強する必要がありますね。



一難去ってまた一難

せっかく WEB サービスの検索問題が解決したと思ったら、今度はシャーロック・ホームズの WEB サービスを利用したページで問題が発生していました。 しかも、こっちは全く分からないトラブルです。今度は検索機能を付加していないアマゾン WEB サービスで、データを抽出するために送る URL に 「SearchIndex」を挿入しています。 これは、検索するカテゴリを定めるもので指定できる種類は「Blended(アマゾンサイト内の全ての商品)」「Books(和書)」「ForeignBooks(洋書)」「Music(音楽)」「Video(映画 DVDとVIDEO)」「DVD(DVD)」「VHS(VHS)」「VideoGames(ゲーム)」「Electronics(家電 エレクトロニクス)」「Kitchen(ホーム&キッチン)」「Toys(おもちゃ)」「Software(PC ソフトウェア)」などがあります。 問題が発生しているのは シャーロック・ホームズの洋書 コーナーで、この場合は SearchIndex に ForeignBooks を指定されています。今まで問題なく洋書が表示されていたのですが、最近はなぜか輸入 CD が表示される様になりました。 これは一体・・・どういう事?「SearchIndex」の種類から「ForeignBooks(洋書)」が無くなったか?





Copyright © 2018 MB-Support パソコン初心者のサポートページ All Rights Reserved.

管理人サイト閲覧方法プライバシーポリシー著作権/免責事項