WikiでXMLパースエラー

WikiでXMLパースエラー

- Tatsuya Shirai の投稿
返信数: 7
moodle1.8.1+にバージョンアップしたのが原因かどうか分かりませんが,急にいままで編集できていたWikiが編集できなくなりました.

XMLのパースエラーです.


XML パースエラー: 整形式になっていません。
URL: http://narita.mech.suzuka-ct.ac.jp/moodle2/mod/wiki/view.php?id=320&page=edit/%E5%B0%8E%E5%85%A5%E6%89%8B%E9%A0%86
行番号: 240, 列番号: 6:

//<![cdata[
-----^

これは当方の環境のみで発生していることでしょうか.
それとも他の方の環境でも発生しているでしょうか?
日本語を使わないANKのみのWikiを試しに新規作成しても同じエラーが出ます.

Tatsuya Shirai への返信

Re: WikiでXMLパースエラー

- Tatsuya Shirai の投稿
htmlのソースを見てみると,
<script type="text/javascript" defer="defer">
//<![cdata[
editor_9a0364b9e99bb480dd25e1f0284c8555 = new HTMLArea('edit-content');
var config = editor_9a0364b9e99bb480dd25e1f0284c8555.config;
.....

editor_9a0364b9e99bb480dd25e1f0284c8555.generate();
//]]>
</script>
で,赤く表示されています.この部分がおかしい,特に頭の//の後,<![cdata{がダメであると言っているようです.

そういえば数日内にJavaのアップデートを行なったような気がします.それが影響しているのでしょうか...

javascriptについて全くの無知なので調べてみたのですが,
<SCRIPT TYPE="text/javascript">
<!-- comment to end of line
 document.write("foo");
// comment to end of line -->
</SCRIPT>
のように記述するのが一般的なように書いてあります.//はコメントアウトのために入っているとして,<!--と-->が無いのでエラーだと言っているのでしょうか?

Javaのアップデートでエラーチェックが厳しくなった?(Javascriptも影響を受けるものなのでしょうか).

このXMLパースエラーはIEでもFirefoxでも発生します.

Tatsuya Shirai への返信

Re: WikiでXMLパースエラー

- Tatsuya Shirai の投稿
lib/weblib.phpのfunction use_html_editor()
に手を入れて,
echo '<!--\n';

echo '// -->\n';
でサンドイッチしたらXMLパースエラーは出なくなりましたが,
HTMLエディタ画面内が,HTMLタグがそのまま表示されてしまいました...
//<!cdata[//>でサンドイッチされていることには意味があるようですねぇ.
どうして急にHTMLエディタが動かなくなったのだろうか.


Tatsuya Shirai への返信

Re: WikiでXMLパースエラー

- Tatsuya Shirai の投稿
なるほど,この//<![cdata[の記述はXML対応の書き方なのですね.

http://ja.wikibooks.org/wiki/JavaScript_XML

正しそうです.唯一気になるのは<script>と//<![cdata[の間に改行が入っている点だけですね.

echo '//<![CDATA['."\n\n"; // Extra \n is to fix odd wiki problem, MDL-8185

これだと後ろの\nですが,この辺りの改行の扱いにカギがありそうです.
試してみます.

Tatsuya Shirai への返信

Re: WikiでXMLパースエラー

- Tatsuya Shirai の投稿
自己完結です申し訳ありません.

問題は解決しませんが,原因らしきものが分かってきました.
現象は予想以上に悪い状態にあり,Webページの作成でもHTMLエディタが起動せず,他の箇所でもXMLパースエラーが頻発することが分かりました.1,2箇所を直してどうこうなるような感じではありません.

moodleを古いシステムに戻してもダメでした.
ところがmysqlのデータを古いものに戻すとXMLパースエラーが発生することなく,Wikiの編集が可能になりました.理由はハッキリしませんが,データベースに問題がありそうです.

恥ずかしい話ですが,moodle1.8+をmoodle1.8.1+に更新した際にデータベース等のバックアップを取っていませんでした.今回のバージョンアップではデータベースの更新が行なわれたのですが,この作業が途中で異常終了してしまいました.スクリプトのエラーが原因でしたので,それを直してもう一度試みたのですが,正常にアップデートが終了したのか,失敗したのかよく分からない終わり方をしました.

今から思うと,このデータベースの更新の失敗が一番大きな原因だったのではないかと思います.それがどうしてXMLのパースエラーになるのかは分かりません.

失敗したデータベースのアップデートをやり直す方法は無いでしょうか?

Tatsuya Shirai への返信

Re: WikiでXMLパースエラー

- Tatsuya Shirai の投稿
$CFG->versionを騙してデータベースのアップグレードを行なった(今回は成功)のですが,状況は好転しません.やはり無関係でしたか...

Tatsuya Shirai への返信

Re: WikiでXMLパースエラー

- Tatsuya Shirai の投稿
なぜかテーマを一旦別のテーマに変更したら直りました.

standartblueを使用しているのですが,これをcameleonに変更したことで,まずWikiの変更が可能になりました.続いて,standardblueに戻したところ,こちらでもWikiの編集が可能です.

一安心と言いたいところですが,状況が好転したのはFirefoxだけで,IEですとテーマを変えたらXMLパースエラーは出ないようになりましたが,その代わり画面が真っ白(HTMLソースは送られてきています.defer属性が有効なので表示されないようです).

ソースを見てみると,meta nameとして送信されてくるWiki名称が文字化けしています.
IEだけ文字化けする,ちょっとどこかで聞いたような話がWikiにまで飛び火してきたのでしょうか.こんな感じです.
<meta name="keywords" content="moodle, OpenAiMech: チEト縺E繝医ャ繝 " />


ページ名をANK文字で記述すると問題なくIEでも編集可能です.

別に,strsub()等で切られている訳では無いようです.
適当に長い単語をページ名としたら,
<meta name="keywords" content="moodle, OpenAiMech: This page is wrote by only ank character and very very very very very long word " />
このように省略されずに,このvery longな単語のページを編集できましたので.

Tatsuya Shirai への返信

Re: WikiでXMLパースエラー

- Tatsuya Shirai の投稿
やはりIEに対してはrawurlencode()して送信するのが解決策なのでしょうか,

mod/wiki/view.phpの380行近辺,
// $row[] = new tabobject($tabname, $ewbase.'&amp;page='.$tab.'/'.$ewiki_id, $tabname);
$row[] = new tabobject($tabname, $ewbase.'&amp;page='.$tab.'/'.rawurlencode($ewiki_id), $tabname);

何かmoodle.1.8+からmoodle1.8.1+になる際に修正があったのでしょうか.
単にいままでFirefoxしか使用していなかったため気付かなかったのでしょうか?

とりあえず上記の修正で「編集」は問題なくIEでも行なうことが出来るようになりました.

ふー,行けども行けども完全マルチバイト対応の道の先は長いですね.