WP Category Tag Cloud がぶっ壊れたのと同じ原因で色んな道具が壊れた

WP Category Tag Cloud がぶっ壊れたで起こっているのとおんなじことが、「道具」群で。

fontuneSkyScanner命名規則のための名前変形処理@(Python + jquery + json)。これも <p> やら <br/> やらを撒き散らされて全滅。何してんだ、誰がやってんだ。これが「サニタイズ」とかなんだとしたら笑っちまうぜ、酷すぎねぇか?

ただ幸いなことにこれらはどうせ自作なので、簡単に措置は出来た。要は改行しなきゃいいわけで。

 1 /**
 2  *
 3  */
 4 function fortune_js_handler($atts, $content=null) {
 5 $str=<<<eot
 6 /*省略*/
 7 eot;
 8         /* 改行コード、空白の連続を一個の空白に */
 9 	return preg_replace("/[ \n]+/", " ", $str);
10 }
11 add_shortcode('fortune_js', 'fortune_js_handler');

注意しなければいけないこと。javascript はかなり緩い言語仕様なので、普通であれば、

1 var a = 1
2 var b = 1;

は許されてしまいますな(セミコロンの抜け)。でも「改行コード、空白の連続を一個の空白に」すると、

1 var a = 1 var b = 1;

となるね。このような置換後コードが動くか動かないかは運次第。適用前にセミコロンはちゃんとしとくがいいね。それともっと被害甚大なのがコメントの形式な。

1 //var a = 1;
2 var a = 3;
3 /*var b = 1;*/

これが

1 //var a = 1; var a = 3; /*var b = 1;*/

こうなる。はいぃ、アウト。

注意すべきことはこれだけね。

なお、「問答無用に<p> やら <br/> やらを撒き散らされ」る振る舞いにはなにか「それらしい仕様」があるようで、不思議なことに

  • style要素の終了タグの直後に問答無用で改行する
  • style要素の終了タグの直後に問答無用で改行後、なぜかパラグラフ(<p>)が開始する

らしい。つまりは、preg_replace さえも無碍にしてしまう強烈なものなのだが、まぁスクリプトの動作には問題ないみたい。

どうも head セクションなら加工は行われず、body セクション内をゴリゴリ書き換え出すようであって、なんというか、まっとうに css、javascript を外出しのファイルにして head 内で link で読み込む、とすればこの問題は起こってなかったのであろうな。

いまのところはどの「道具」も所詮はオモチャなので別段致命傷ではないけれど、これ、商売だったらえらい損害だったろうね。

2015-06-20 23:15 追記
この話の「しかるべき対処」についてはWordPress での自動パラグラフやらバッククオートがcodeになったりやらを無効化参照。