XHTML 1.0 を有効にしたままテキストエリア フィールドに改行を追加することはできますか?

StackOverflow https://stackoverflow.com/questions/755944

質問

編集: 自分の投稿を読み直してみると、何が問題なのか少しわかりにくいと思います。言い換えてみましょう:

ユーザーは、フォームのテキストエリア フィールドを使用して、私のサイトにコメントを残すことができます。を使用してコメントに改行を追加できるはずです <br />. 。その後、コメントは mysql データベースに文字列として保存され (安全のためエスケープされます)、後でデータベースから取得されてサイトに表示されます。コメント表示時には通常の改行は認識されません。

ユーザーはコメントを編集でき、その場合、元のコメントがテキストエリア フィールドに表示されて変更されます (下の画像を参照)。問題は、何かがある場合です。 <br /> 存在する場合、コードは XHTML 1.0 として有効ではありません (以下のエラー メッセージを参照)。

他のタイプの改行を使用してコードを有効にすることはできますか?コメントに記載されているように、通常の改行と xml:space="preserve" の組み合わせは機能しません (改行はテキストエリア フィールドに表示されますが、コメントがサイト上で通常のテキストとして表示される場合は表示されません)。


元の質問:

コメントを残すためのテキストエリアフィールドを含むWebフォームがあり、次を使用して改行を追加できるようにしたいです。 <br />. 。以下に簡単な例を示します。

screen dump
(ソース: shipit.se)

これは意図したとおりに動作しますが、W3C 検証サービスを使用すると、XHTML 1.0 暫定版として検証されません。これは私が受け取るエラーです:

  1. エラー行 90、列 1587:文書タイプでは要素「br」は許可されていません

…ription" rows="0" cols="0">Test<br />line break</textarea></dd><dt class="cha

上記の要素は、許可されていないコンテキストで見つかりました。これは、要素が間違ってネストされている (「head」内ではなく「body」セクションに「style」要素があるなど)、または 2 つの要素が重なっている (これは許可されていません) ことを意味している可能性があります。

このエラーの一般的な原因の 1 つは、HTML ドキュメントでの XHTML 構文の使用です。暗黙的に閉じられた要素に関する HTML のルールにより、このエラーにより連鎖的な影響が生じる可能性があります。たとえば、HTML ドキュメントの「head」セクションの「meta」と「link」に XHTML の「自己終了」タグを使用すると、パーサーが「head」セクションの終わりと「body」の始まりを推測する可能性があります。 " セクション (「リンク」と「メタ」は使用できません。したがって、エラーが報告されます)。

改行を有効なコードにする方法はありますか、それとも回避策を見つける必要がありますか(例:テキストエリアフィールドの改行に特定のタグを使用し、それらを次のタグに置き換えます。 <br /> 後でコメントを表示するときに)?

役に立ちましたか?

解決

から DTD:

<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->

ページの XHTML コードでは、 <textarea> テキストのみを含めることができます (#PCDATA)、その中に XHTML 要素をネストすることはできません。 <textarea>.

あなたの質問は2つの異なることを示しているようです。画像は「<br />"に書き込まれます <textarea>, 、W3C バリデーターからのメッセージは、 <br /> ページの XHTML 内に書き込まれる要素 <textarea> 要素。

最初のケースでは、「Test<br />line break" テキスト領域でユーザーに表示されるのは、適切なエンティティを使用することによって行われます。 代替コグニート 書きました:

<textarea>Test&lt;br /&gt;line break</textarea>

ユーザーが入力した内容はすべて、 <textarea> 新しいページではエンコードする必要があります(つまり、 &, ", ', <, 、 そして >).

ユーザーのエントリを表示したい場合:

テスト<br />改行

...として...

テスト
改行

...別のテキスト領域内で、元のテキスト領域に入力された内容を解析する必要があります <textarea> ユーザーが入力したものを置き換えます <br />s は通常の改行を使用します。 ルセロの答えを参照してください.

他のヒント

あなたはxml:space="preserve"属性を追加しようと、単なる通常の改行を使用することがありますか?

なぜ定期的な改行を使わないのでしょうか?それらはうまく動作します。

あなたは<br />を表示したい場合、あなたはそれらのエンティティをエンコードする必要があります:

&lt;br /&gt;

私はちょうどこれと作品をやっています。

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top