今度の現象は,<a href="ほにゃらら">のURL欄に日本語(マルチバイト)を含む場合に発生します.前回の問題は単にキャッシュヒット時に表示できないだけでしたが,今回の問題はキャッシュヒット時だけでなく,そもそものデータがおかしな(=化けた)文字列に一部だけ書き換えられてしまうため,正常なハイパーリンクが実施できません.
いま確認しているのは,URLに”業”の字を含む場合です.UTF-8ではE6 A6 ADのようですので,単純なstr_replace()等による置換ではなさそうです.
具体的には,URL欄に,
http://www.suzuka-ct.ac.jp/mech/moodle/file.php/13/ECS/ECS_Wiki用データフォルダ/山口卒論/卒業論文 山口0227y.pdf
というアドレスを「閲覧」で選択してOKします.そしてWiki編集画面で”プレビュー”をクリックして表示された画面では,このクリッカブル文字列のアドレスの「卒業論文」の「業」の字が化けます.
同じようにHTMLエディタでURLをハイパーリンクさせても,”Webページの追加”あたりではこの現象は発生しません.何故かは分かりません.
いまのところ,
lib/weblib.php 中の function clean_text()の中から呼んでいる,
/// Clean up embedded scripts and , using kses
$text = cleanAttributes($text);
をコメントアウトすれば,”業”が文字化けしないことは確認しています.cleanAttributes()は,
function cleanAttributes($str){
コールバック関数cleanAttribute2()が正体です. $result = preg_replace_callback(
} '%(<[^>]*(>|$)|>)%m', #search for html tags
"cleanAttributes2",
$str
);
return $result;"cleanAttributes2",
$str
);
ちょっと複雑そうなので解析にもう少し時間が掛かります.