Tips

Windows Server向けのURLエンコード

日付2015/12/10
ID15-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関数についてお調べください。