APIのRequestへの電子署名添付(PHP版)」を書いた。ここで、アマゾンDBへのアクセスに必要になった電子署名を付け加えるためのphp関数と使用法について説明しておいた。ところが、以前に作成したコードの修正作業をするなかで、書名などの日本語文字が含まれるRequestに対しては、正しく動作しないことが分かった。原因は、日本語文字など2バイト文字をRequestに含める場合には、これらをurlencodeしておかねばならないということらしい。修正版のphpコードを示しておいた。$signature;}?>前回のコードとの違いは、Request用のパラメータセットのそれぞれをurlencodeしておくという点だ。今のところ、特段の問題なく正常に動作している。前回のコードについても、日本語文字(文字コードUTF-8)があらかじめurlencodeされていれば動作する。電子署名が要求されない従来のRequestについては、書名などの日本語文字(UTF-8コード)をurlencodeしない生のままで含めても問題なく処理されていた。そのあたり、アマゾンの説明では、何も言及されていない。不親切ではないのかと思ってしまう。参考のため、以前「アマゾンAPIを活用した蔵書管理システム(1)」で示した書籍検索用のphp関数BookSearch()の署名添付した形の修正版、並びに動作例を以下に示しておく。コードは、上記したエントリー「アマゾンAPIを活用した蔵書管理システム(1)」に示したものを電子署名部のみ修正したものになっており、以前に書いたものと重複するが、このエントリに示したもののみで動作するよう関連コードを全て書いた。このコードの使用に際しては、Secret-ID、Key-ID、Associate-Tagなどを自らのものに書き換えて欲しい。使用に際して問題を見つけた場合には、コメントしていただければありがたい。