3

編集:私の投稿を読み直した後、私は問題が何であるかについて少し不明確であると思います. 言い直してみましょう:

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

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

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


元の質問:

コメントを残すためのテキストエリア フィールドを含む Web フォームがあり、<br />. 以下に簡単な例を示します。

スクリーンダンプ
(ソース: 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 />後でコメントを表示するときにそれらを置き換えるなど)?

4

4 に答える 4

2

属性を追加して、xml:space="preserve"通常の改行だけを使用してみましたか?

于 2009-04-16T12:53:53.490 に答える
2

通常の改行を使用しないのはなぜですか? それらはうまく機能します。

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

&lt;br /&gt;
于 2009-04-16T12:54:47.653 に答える
1

DTDから:

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

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

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

最初のケースでは、 altCognitoが書いTest<br />line breakたように、適切なエンティティを使用することで、ユーザーのテキスト領域に " " が表示されます。

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

ユーザーによって入力さ<textarea>れ、新しいページの 内に再表示されるものはすべてエンコードする必要があります (つまり、 、 、 、および のエンティティを&使用"'ます<) >

ユーザーのエントリを表示する場合:

<br />改行のテスト

...なので...


改行のテスト

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

于 2009-04-16T13:59:19.590 に答える
1

私はこれをやっただけで動作します。

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10">
-----Mensaje Original-----
{blank space}
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?>
</textarea>
于 2013-03-04T21:32:36.763 に答える