Windows Server向けのURLエンコード
日付 | 2015/12/10 |
---|---|
ID | 15-016 |
バージョン | v12以降 |
プラットフォーム | Windows, Mac |
URLエンコードを扱う場合、相手のサーバに合わせた文字セットでのエンコードが必要になります。一般的には、UTF-8でエンコードを行うことで問題ないはずです。UTF-8でのエンコードは、PHPの関数を利用すると簡単です。
参考記事:4DでのURLのエンコードとデコード
しかしWinodwsで構成されたサーバーなどにアクセスするときには、時としてUTF-8以外の文字セットでエンコードする必要があります。その場合には、独自にPHPで関数を作成すると簡単に変換することができます。実際に作成するには次のように行います。
まず最初に、次のPHPのコードを記述したファイルを用意します。
<?php function myEncode($p1, $p2) { $str = mb_convert_encoding ( $p1, $p2, "UTF-8" ); return urlencode ( $str ); } ?>
作成した関数名は「myEncode」で、第1引数にエンコードする文字列、第2引数に文字セットを指定できるようにしました。エンコードされた文字列は、戻り値で受け取ります。これをクライアント側でも利用できるように、Resourcesフォルダ内に入れるのが良いでしょう。この作成では、Resourcesフォルダ内に「php」という名称のフォルダを作成して「encode.php」というファイル名で保存しました。これを呼び出すよう前述の記事の4Dコードを変更します。
C_TEXT($0;$1) C_TEXT($php_file) $php_file:=Get 4D folder(Current resources folder)+"php"+Folder separator+"encode.php" $result:=PHP Execute($php_file;"myEncode";$odata;$1;"sjis-win") //Put back characters for URL $odata:=Replace string($odata;"%3b";";") // ; セミコロン $odata:=Replace string($odata;"%2f";"/") // / バックスラッシュ $odata:=Replace string($odata;"%3f";"?") // ? クエスチョンマーク $odata:=Replace string($odata;"%3a";":") // : コロン $odata:=Replace string($odata;"%40";"@") // @ アットマーク $odata:=Replace string($odata;"%26";"&") // & アンパサンド $odata:=Replace string($odata;"%3d";"=") // = イコール $odata:=Replace string($odata;"%2b";"+") // + プラス $odata:=Replace string($odata;"%2c";",") // , カンマ $odata:=Replace string($odata;"%24";"$") // $ ドル $odata:=Replace string($odata;"%24";"$") // $ ドル $0:=$odata
上記作例では、PHP Executeコマンドで呼び出す際に渡している5番めの引数をWindows Server用の文字セットに指定しています。この文字セットを相手のサーバーに合わせて指定することで、Windows Server以外でも利用できるエンコードを得られます。エンコードできる文字セットについては、PHPのmb_convert_encoding関数についてお調べください。