2009-04-16 5 views
3

編集:私の記事を読んだ後、私は問題が何であるか少し不明であると思う。それを再フレーズしようとしましょう:XHTML 1.0を有効にしたまま、テキストエリアに改行を追加できますか?

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

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

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


オリジナル質問:

私は、コメントを残すテキストエリアのフィールドを含むウェブのフォームを持っている、と私は<br />を使用して改行を追加できるようにしたいです。以下は簡単な例です:

screen dump http://www.shipit.se/dump/textarea-dump.png

意図したとおりにそれが動作W3C検証サービスを使用している場合、しかし、それは過渡的なXHTML 1.0として検証しません。

  1. エラー行90、列1587:これは私が取得エラーです文書型は、上記の名前の要素がで発見された、ここで

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

要素 "BR" を許可していません。それが許されない文脈。これは、 "head"の内部ではなく "body"セクションの "style"要素や、重複する(許可されない)2つの要素など、入れ子になっていない要素が間違っていることを意味します。

このエラーの一般的な原因の1つは、HTMLドキュメントでのXHTML構文の使用です。 HTMLの暗黙的に閉じた要素の規則のために、このエラーはカスケード効果を生成する可能性があります。例えば、HTML文書の "head"セクションの "meta"と "link"にXHTMLの "self-closing"タグを使用すると、パーサーは "head"セクションの終わりと "body" ( "link"と "meta"は許可されていないため、報告されたエラー)。

ラインを作るための方法はあります壊れ有効なコード、または私は例えば表示するときに、後で<br />に置き換えるその後、テキストエリアのフィールドに改行のために特定のタグを使用してのような(回避策を見つける必要がありませんコメント)?

+0

@aspartame:画像を表示しました。ご心配なく。 – Welbog

+0

@Welbog:ありがとう! – aspartame

答えて

1

を:あなたのページのXHTMLコードで

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

<textarea>にはテキスト(#PCDATA)しか含めることができず、XHTMLのエルをネストすることはできません<textarea>内のements。

質問には2つの異なるものが表示されているようです。イメージは<textarea>に書かれた "<br />"を表示し、W3C Validatorからのメッセージは<textarea>要素内のページのXHTMLに書き込まれた<br />要素を指しています。 「Test<br />line breakは、」テキスト領域にユーザーに表示された最初のケ​​ースで

は、 altCognitoが書いたのと同様に、適切なエンティティを使用して行われます:ユーザーによって入力されています

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

何を新しいページ上の<textarea>内に再表示することをエンコードする必要があります(つまり、&"'<、および>のエンティティを使用する必要があります)。

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

テスト<br />改行

として

... ...

テスト
改行

...別のテキスト領域内にある場合は、元のテキストに入力された内容を解析し、ユーザが入力した<br />を通常の改行に置き換える必要があります。 See Lucero's answer

2

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

+0

+1。 xml:spaceを使用すると、コンテンツの忠実性が向上します。 – AnthonyWJones

+0

私はそれを今は試みましたが、残念ながらそれは動作しません。私はmysqlデータベースにコメントを保存し(php関数mysql_real_escape_string()を使って安全にした後に)、データベースから検索して表示します。おそらく問題はここにあるのだろうか? – aspartame

2

定期的な改行を使用してみませんか?それらはうまく動作します。

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

&lt;br /&gt; 
1

私はちょうどこれを行い、動作します。

<textarea name="contenidoMensaje" id="contenidoMensaje" cols="80" rows="10"> 
-----Mensaje Original----- 
{blank space} 
<?php echo str_replace("<br />", "\n", $contenidoMensaje); ?> 
</textarea> 
関連する問題