ブログ カレンダー

« « 2024 4月 » »
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 1 2 3 4

カテゴリ一覧

アーカイブ

最新のエントリ

最新のコメント

最新のトラックバック

趣味のブログ - AjaXplorer エディタのマルチエンコーディング化

AjaXplorer エディタのマルチエンコーディング化

カテゴリ : 
Ajax
執筆 : 
OhYeah! 2010.08.21 19:40
 AjaXplorer のエディタを UTF-8 だけでなく、EUC-JP, Shift_JIS, ISO-2022-JP に対応させるコードハックです。以前、携帯農薬検索実験室に書いたネタですが、あちらのコードは半角スペースが全角に変換されていて切り貼りできないことと、2.6.1 でも同じハックが使用できることを確認したので、再度こちらにも掲載します。2.7.x のコードは見ていないので、これでいけるかどうかは不明です。
 このハックにより、UTF-8 以外のエンコーディングでも日本語が化けずに表示されるようになります。エンコーディング変換機能はないので、元ファイルのエンコーディングで保存されます。ついでに、保存時にファイルロックをかけるようにしてあります。
 修正するファイルは、plugins/access.fs/class.fsAccessDriver.php だけです。

1. マルチエンコーディング表示
 function readFile の
		if($headerType == "plain")
		{
			header("Content-type:text/plain");
		}
を下記のように修正します。

		if($headerType == "plain")
		{
//			header("Content-type:text/plain");
			// Added by OhYeah!
			$header = "Content-type:text/plain";
			if (ConfService::getLanguage() == 'ja' && function_exists('mb_detect_encoding')) {
				if (!$data) {
					$filePathOrData = file_get_contents($filePathOrData);
					$data = true;
				}
				session_start();
				$_SESSION['edenc'] = mb_detect_encoding($filePathOrData);
				session_write_close();
				switch (strtolower($_SESSION['edenc'])) {
					case 'sjis':
					case 'sjis-win':
						$header .= '; charset=shift_jis';
						break;
					case 'euc-jp':
					case 'eucjp-win':
						$header .= '; charset=euc-jp';
						break;
					case 'iso-2022-jp':
					case 'jis':
						$header .= '; charset=iso-2022-jp';
						break;
					case 'utf-8':
						$header .= '; charset=utf-8';
				}
			}
			header($header);
			// End Addition
		}


2. 元ファイルのエンコーディングで保存
function switchAction の case "edit" の
					$fp=fopen($fileName,"w");
					fputs ($fp,$code);
					fclose($fp);
					header("Content-Type:text/plain");
を下記のように修正します。

/*
					$fp=fopen($fileName,"w");
					fputs ($fp,$code);
					fclose($fp);
*/
					// Added by OhYeah!
					if (isset($_SESSION['edenc'])) {
						$code = mb_convert_encoding($code, $_SESSION['edenc'], mb_detect_encoding($code));
					}
					file_put_contents($fileName, $code, LOCK_EX);
					// End Addition
					header("Content-Type:text/plain");

トラックバック

トラックバックpingアドレス http://www.o-ya.net/modules/d3blog/tb.php/11

コメント一覧