« ウェブコンテンツ・テキストバージョン・ジェネレーター(Naked Beta)。 | メイン | コメント/トラックバックスパムと戦うための5つのヒント。 »

tag2xhtml

8月3日更新、グローバルフィルター版も作成しました。

概要

MT4のWYSIWYG(リッチテキスト)エディターが生成するHTMLをクリーンアップします。

要素タイプ名と属性名を小文字に変換し、空要素タグを /> で閉じます。また、B, I, U, STRIKE, FONT 等の物理要素をそれぞれ STRONG, EM, INS, DEL, SPAN要素に置換します。

また、ダブルクォーテーションで囲まれていない属性値をダブルクォーテーションで括ります。

背景・経緯

MT4のWYSIWYG編集では、例えば "<br>" が "<br />" にならないとか IMG要素が閉じられない (つまり空要素が />で終わらない) 問題があります(Beta2の時にフィードバック済み)。

またWindows版 Internet Explorer, Opera* だと要素タイプ名/属性名が大文字になってしまいます。

*Macintosh版 Safariでも要素タイプ名/属性名は大文字になりますが、そもそもSafariではWYSIWYGがうまく動作しません。

テンプレートはXHTMLで書かれていますのでこれらの部分はXHTMLとして正しくないことになります。

また、B, I, U, STRIKE, FONT 等の要素が使われることからWYSIWYGを敬遠する人も多いかと思います。

簡単に修正できるのか? と思っていましたがBeta7で修正されていないところを見るとコード数行で済む問題でもないようです。

H.Fujimotoさんのエントリーによると、

動作からすると、リッチテキストエディター部分のinnerHTMLプロパティをそのまま出力しているようです。

とあります。となるとブラウザがHTMLを生成しているわけで、修正するには根本的に実装方法を変える必要があるという、ちょっとやっかいな仕様ということになります。

MT4のWYSIWYGエディタについて言及している他サイトのエントリー

ということもあって、MT4のWYSIWYGエディタが生成したHTMLを出来る限りクリーンアップするプラグインを作成しました。

利用方法

プラグインフォルダに tag2xhtml.pl をアップロードします。

再構築の際 (ファイルがディスクに書き出される直前) にファイル全体に対して処理を行います(「確認」段階では処理は行われません。またデータベースに格納されるデータは変換されません)。

ダイナミックパブリッシングには未対応です。

処理内容

  • 要素タイプ名と属性名を小文字に変換します。
  • 空要素タグを /> で閉じます。
  • B, I, U, STRIKE, FONT 等の物理要素をそれぞれ STRONG, EM, INS, DEL, SPAN要素に置換します (簡易的な対応ではありますが、主な視覚系UAのデフォルトスタイルが同等な論理要素に置換します) 。

対応バージョン

MovableType3.x, MovableType4.0

ライセンス

パブリック・ドメイン

ダウンロード

カテゴリー: MovableTypeプラグイン

トラックバック

このエントリーのTBPingURL:
http://junnama.alfasado.net/mt/RRrt4444.mt/1974/tag2xhtml.html

コメント (2)

:

こんにちは。

私もシックスアパートにフィードバックしましたが、「対応を検討している」という返事が来ました。
本製品に間に合うかどうか微妙な気もしますが、ぜひ対応して欲しいものです。

ちなみに、リッチテキストエディターの内容は、mt-static/js/common/Editor/iframe.jsにあるgetHTMLメソッドで変換されています。
このメソッドを見ると、innerHTMLプロパティをそのまま返していることが分かります。
このメソッドを書き換えて、DOMを使ってHTMLを再構成するというのが、この問題の本質的な解決方法になると思われます。

壱さんこんばんは。

MT4のインターフェイスが変更になった時点で JavaScriptとかAjax使われているあたりブラウザ互換とかで苦労しそうな気がしてましたが、なるほどそうですか。
mt-static/js/common/Editor/iframe.js ですか。

ちょっと見てみようかな。このあたりがOSSじゃないので何だか触りにくいんですよね...

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


トップページ | アーカイブ(このブログの全てのエントリーの一覧)

最近のエントリー

このブログのフィードを取得
[フィードとは]