変わったんだけど、なんか見た目がかわらなくて、親しみやすくていいですね。
というのは毎日このページとにらめっこしてた人だからかな。
さて、今日の裏話をしようか。
まず、Internet Explorerでカウントが回らない件は今日気付いた。もしかするとphp.iniの変更が原因かも。
なぜかよくわからないのでCompanionJSとMicrosoft Script Debuggerを導入してみた。
それで程なく原因はわかった。意味不明なエラーコードC00CE56Eのエラーが出てると。
それを正しく理解するまでは時間がかかったが、それを理解してからは早かった。
はて、どうしたものか。Google検索したところこれの示す意味は
「指定したエンコードはシステムでサポートされていません。」
らしい。まぁしかし意味不明だ。
ただ解決するためにはそのカウンターのPHPの結果のヘッダーにcharsetを指定すればいいと。
header("Content-type: text/plain; charset=UTF-8");
これで解決した。Shift_JISでも問題ないな。
今回このファイルはASCIIの範囲内なのでEUC-KRと書いても、ISO-8859-1でもいい。
事実、解決例はISO-8859-1となってた。けど気持ち悪いので。
さて、2つ目はrss.phpのこと。
実はBlognplusのRSSは?mode=rssを使うんです。
だけど、今までのRSS設定を変えないで済む方がいいです。RSSだけは変えないで済ませたい。
そう考えて、rss.phpを起こしました。まず2つincludeを書く。
include("./conf.php");
include("./common.php");
その上でblogn_rss_view関数の中身を抜き出して、$userをfalseに置換。
それでblogn_change_url関数をコピー、以上。と結論は簡単です。
そこまで行き着くまでいろいろあったのですが…
さて、しかしこのRSSは相対パスの解決が悪い。なので部で使うときblogn_change_url関数を改めました。
/* 相対パス → 絶対パス変換 */
function blogn_change_url($matches) {
if ($matches[1] == "<a href=\"") { $endtag = ">"; }
else { $endtag = " />"; }
$url = absolute_url($matches[2]);
return $matches[1].$url.$matches[3].$endtag;
}
function absolute_url($in){
$base1 = preg_replace("{^(https?://[^/]*)(/.*?)$}","$1",BLOGN_HOMELINK);
$base2 = preg_replace("{^(https?://[^/]*)(/.*?)$}","$2",BLOGN_HOMELINK);
if(preg_match("{^(http|https|ftp)://}" , $in)){ return $in; exit; }
if(preg_match("{^/}" , $in)){ return $base1.$in; exit; }
while( TRUE ){
$in0 = $in;
$in = preg_replace("{^\.\.(/(.*))?$}","$2",$in);
if($in != $in0){
$base2 = preg_replace("{^/[^/]+/}","/",$base2);
continue;
}
$in = preg_replace("{^\.(/(.*))?$}","$2",$in);
if($in == $in0) break;
}
return $base1.$base2.$in;
}
長い…まぁこんな風にしたわけです。
これが絶対正解と言い切れないのですが、僕の趣味の悪い相対パスの記述をほぼ理解したのでいいでしょう。
そうそう、ついでに、他のBlognplusの使いにくいと思った部分の改造も書いておきます。
まず1つはちょっと深刻な問題。文字実体参照の<>&を書いても元の文字に戻ってしまう問題。
これ実は深刻で。「<br>を使いなさい」などというのもうまく解釈しないというわけ。
index.phpとadmin.phpの下2行それぞれの記述をすべて削除。
$mes = blogn_html_tag_restore($mes);
$more = blogn_html_tag_restore($more);
どちらも正直無駄な動作です。
もう1つは、br要素にまつわる問題。Blognplusは表示時、<br />(内部ではこうなってる)を置換するとき<br />\nに置換する。
これの問題点は2つあって、HTMLでは<br>と書かないといけないのに<br />にしてしまうこと。
もう1つはpre要素を使うとき、br要素の改行と\nの2つの改行が入ってしまうこと。
なのでindex.phpの「// brタグの後ろに改行コードを入れるの」コメントの前後を変更する
$blogn_skin = ereg_replace("<br />", "<br>", $blogn_skin);
// brタグの後ろに改行コードを入れる←入れない
//$blogn_skin = ereg_replace("<br />", "<br>", $blogn_skin);
1行コメントアウトでOKです。
あと、改行をbr要素に変換して投稿するにしている場合、ブロックレベル要素近辺は注意してかかないと変な改行が入りますよ。
まぁ多分気付くと思うけど。
あともう1つあるのだけどまた別に書きますわ。それは非常に有益な記事なので。
しかしすごい大改造をしたもんだ。