Last Edit Date: 07/07/2008
TEXTAREAの動作
TEXTAREAはFORMの中で使われる複数行のテキストを編集するするものです。 データベースからのテキストをそのまま表示するように見えますが、 いくつかの問題があります!
TEXTAREAは<textarea>と</textarea>の対になるTAGで構成され、この対になるTAGに中に書かれたテキストを表示します。 もしここでHTML TAGを含むテキストを表示したときにはどうなるのでしょうか? テキストを決してそのまま表示はしません。 また<textarea>。。。。。</textarea>を含むテキストの時には、テキスト中の</textarea>をTEXTAREAの終端TAGとみなし、それに続く文字列をTEXTAREAの外に表示してしまいます。
このTEXTAREAを含む文字列をTEXTAREAに表示するためには、文字列中の</textarea>を文字列であることを伝えなければいけません。
最初の文字列中の<textarea>はFORMの<textarea>に続きますので無視されます。
そのためにエスケープ記号が用意されています。
とりあえずここで必要なエスケープ記号は
< <
> >
& &
です。
単なるHTMLテキストでしたら 文字列中の</textarea>は <textarea>となります。 FORMでは、 </textarea>と表示されます。 ということは、その文章を保存したときには、意図した</textarea>として保存されません! あくまで表示された状態の文字列として保存されます!
&で始まるエスケープ記号は、文字としてTEXTAREAに渡されます! ということは&lt;/textarea&gt;と記述されることによって、最初の&で始まるエスケープ記号が処理されます。 結果は意図した </textarea>として表示されます。
そこでAkuakuでは次のように処理しています。
source2 = FILTER(pagesource, "&", "&amp;")
source3 = FILTER(source2, "<", "&lt;")
source4 = FILTER(source3, ">", "&gt;")
source5 = FILTER(source4,"</textarea>","</textarea>")
pagesourceはMEMOフィールドです。
最初の&を &amp;としているのは、 &として表示されるためには、 最初の&記号が文字に変換される為です。 この &amp;は&に変換されます。
openWYSIWYGはTEXTAREAの代替であるので、文字処理に関しては全くTEXTAREAと同じです。 保存時にはHTML TAGは &で始まるエスケープ記号に変換されて保存されます。エスケープ記号の変換処理はサーバーからブラウザーに送られるときに、ブラウザーで処理されるのでしょう??
Akuakuの上記の処理の順番を間違えるとえらく分けの分からないものになります。 ご注意ください。
| Advertisement |
|
|