Tips

4DのPHPにおける日本語対応

日付2015/06/01
ID15-004
バージョン12以降
プラットフォームWindows, Mac

4DのPHPが特に日本語に対応している訳ではありませんが、4DのPHPで日本語を扱うことに問題はありません。4DがPHPに渡すパラメータやPHPから戻される戻り値はUTF-8になりますので、その点に留意してプログラミングを行うことで日本語を取り扱うことができます。

実際に例題を作成して試してみます。

例題1

この例題は、カンマ区切りの文字列をカンマで分解し、その分解した要素で4Dの配列を作ります。

ARRAY TEXT($array_4d;0)
$isOK:=PHP Execute("";"explode";$array_4d; ",";"日本語,で,あそぼ")

PHP側でUTF-8をそのまま扱えるので、この例題では特に工夫すること無く、日本語データを扱うことができます。

例題2

この例題では、Windowsで日本語のパスを扱えるかを試します。

Windowsでは日本語のパスはShift JISで扱うことになりますので、UTF-8をそのまま使うことが出来ません。PHP内部でパラメータのコード変換を行う必要があります。それをふまえて書いたPHPが次のコードになります。

<?php
function GetFileList($folderPath ) {
	$folderPath = mb_convert_encoding($folderPath,'SJIS','UTF-8');
	if ($dir = opendir($folderPath)) {
		while (($file = readdir($dir)) !== false) {
			if ($file != "." && $file != "..") {
				$fileNames = $fileNames."$file\n";
			}
		} 
	} 
	closedir($dir);
	$fileNames = mb_convert_encoding($fileNames,'UTF-8','SJIS');
	return $fileNames;
}
?>

このPHPコードは、ファイルとして保存しておきます。さらにこのPHPファンクションを呼び出す4Dのメソッドを作成します。次のコードは、作成したPHPファンクションを呼び出します

$filePath:=Convert path system to POSIX(System folder(Desktop)+"日本語フォルダー"+Folder separator)
C_TEXT($fileNames)
$okPHP:=PHP Execute($scriptPath;"GetFileList";$fileNames;$filePath)

4Dの$scriptPath変数には、作成したPHPファイルのパスを入れてください。この例題では$filePath変数の内容をハードコートしていますが、パスが示すようにデスクトップ上にある「日本語フォルダー」フォルダーの中にあるファイルリストを得ることができます。4Dのコマンドでファイルのリストを得ることは可能なので、その意味において例題自体はテストの域を出ませんが、日本語の取扱には時として文字セットを意識する必要があることが理解できると思います。

実はWindowsにおいてConvert path system to POSIXは不要ですが、Macとの互換性を考えて例題では使いました。一方、PHPはWindowsに特化したコードになっていますので、そのままではMacでは動作しません。MacのファイルパスはUTF-8だからです。ファイルパスに限らず、OSのローレベルな部分を取り扱う際には、そのOSの特徴を知る必要があります。

まとめ

これらの例題が示すように、4DのPHPで日本語を扱うことは問題ありません。