当サイトには構造上の致命的欠陥があります。
一部の環境の方では、当サイトの日記が一部文字化けを起こすことがあります。
具体的に言うと
2013年12月2日~2014年12月31日の期間で文字化けが発生する人がいると思います。
クレームが来て発覚しました
原因はわかりきってます。
こいつです。
じゃあそれ消せばいいじゃんって言われたら、まぁそうなんですが問題はこいつが日記本文ファイルに記述されてることなんですよね。
例えば、これは2014年8月のフォルダ構成なんですが、この
main_○○.htmlというファイルが日記の実体です。
pageうんたらがナビゲーションバー、数字のみのファイルが右側ページのコンテナ、で、index_leftが目次でindex.htmlがページ全体ですね。
まぁもっと言えば、記事への直接リンク用にこんなページも用意してるんですけどね。
今のファイル構成からしてみれば随分とヘヴィーで管理しづらい感じですよね。
これが13ヶ月分あるわけで、まぁ単純計算で30*13で390ページあるわけです。
たった一行消すのに390ページにも及ぶ修正をするなんて苦行を頑張らなきゃいけないとか
控えめに言ってめんどくさいでしょう。
まぁ、一応フォルダ名とファイル名が規則正しいので、最終手段として
javaかなんかでプログラム書いてファイル書き換えをするっていう手もあるんですけどね・・・・・・。でもファイル操作ってバグりそうでこえーんだよなぁ。(笑)
まぁこれは最終手段として。
パッと見フレームページのように見える現行スタイルはこんな感じに、全部一つのファイルにまとめられるんですけどね。どや。(何)
このファイル構成にするために必死こいてCSSの勉強したんだからなァ!!!!
で、phpは基本的にUTF-8で書かなくちゃいけないので
(じゃないとマルチバイト文字を扱う時にバグりやすい)当サイトは基本的にUTF-8で書かれてるはずです。昔から残ってるページは知りませんけど(笑)
例えば完全に存在意義が謎になっている
GalleryとかはShift_JISなんですが、こちらは正常に処理されるみたいですね。特に指定してないけど。
ただ、日記の場合はフレーム構造をしていたりと割とめんどくさいことになってるんで、そう簡単にはいかないワケです。
で、今はどうなっているかというと
全部無視してUTF-8に変換しています。
何故なのかというと、うちの環境ではメタタグがなんか機能してないみたいで、UTF-8としてファイルが解釈されるからです。
ただ、別の環境だとやっぱりメタタグの影響なのかShift_JISで解釈されてしまい、文字化けするそうです。
なので、多少めんどくさくてもなんとかしなくてはいけません。
文字コードがShift_JISから変更できない以上、まず全部Shift_JISに変換し戻してみます。
戻してみたところこうなりました。shift_jisっつってんのに反映されないですね。
そして気になるのが左メニュー・・・・・・よくよく見ると
一部だけ正常に表示されてますね。
一部だけ、というより目次部分がおかしいですね。まずここから考えてみましょう。
これ、確かjavascriptで書いてるんだよなぁ・・・・・・。
・・・・・・うーん。
なんだか泥沼フラグだな。
ということで、さっき最終手段とか言って敬遠していたプログラム修正をすることに今決定しました。
おそらく2年ぶりぐらいに起動しました(笑)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Main_class {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
String path = "D:\TheRong'sCaravan\13_12";
File dir = new File(path);
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
File file = files[i];
String filename=file.getName();
if(filename.indexOf("main_")!=-1){
System.out.println((i + 1) + ": " + file);
//mainファイル発見
try {
FileReader filereader = new FileReader(file);
BufferedReader br = new BufferedReader(filereader);
StringBuffer sb = new StringBuffer();
String str;
int line=0;
while((str = br.readLine()) != null){
if(line<10){
if (str.indexOf("charset=shift_jis")!=-1) {
str=str.replace(" charset=shift_jis", "");
System.out.println(str);
}
}
sb.append(str);
sb.append(System.getProperty("line.separator"));
line++;
}
br.close();
//書き込み
FileWriter filewriter = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(filewriter);
bw.write(sb.toString());
bw.close();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}
}
}
すげー雑ですが、なんとかそれっぽいものが書けましたね。(笑)
テストとして2013年12月のフォルダで動かしてますが、これを実機で動かすとちゃんとshift_jisが消去できたのでいい感じですね。
あとは、2014年の01から12まで、for文で回せば・・・・・・????
ということでやってみました。
ローカルホストとPCでは文字化けしなくなりましたが
スマホだと2013年11月を噛ませると文字化けします。
どういうことかっていうと、2013年11月を経由して、2013年12月に行くと文字化けします。共に文字コードがutf-8のはずなのに。不思議ですね。
原因が全くわかりません。
よりにもよって2013年11月は元カノちゃんとの記念日なんですけどね????
呪いかな???
で、原因を調べてみると・・・・・・
こんなページに解決法がありました。Chromeはデフォルトで文字コードが自動検出されないんですね。
僕が基本的に使ってるAdblock browserだと普通に認識されるので、たぶんChrome特有なんだと思います。こいつにチェックを入れるとちゃんと文字コードが検出されて文字化けしなくなります。
まぁつまり、僕のサイトの構造上の欠陥というより
使ってるブラウザが悪いって話に責任転嫁できるので、とりあえず文字化け問題に関してはこれで解決ということにさせてください(笑)(笑)
長い間放置してきたけど、プログラムで解決できるなら最初からやっておけばよかったですね・・・・・・。(・∀・;)