趣味のブログ - AjaXplorer エディタのマルチエンコーディング化
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 の
2. 元ファイルのエンコーディングで保存
function switchAction の case "edit" の
修正するファイルは、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
コメント一覧
0件表示
(全0件)
すべてのコメント一覧へ