0

このようなスレッドが何千もあるに違いないことはわかっていますが、インターネットとスタックのオーバーフローは他のプログラミング言語からの結果であふれ、単に文字を空白などに置き換えるだけです...

だから...私の問題は次のとおりです...

私は次のフォームを持っています:<input type='text' id='my_input'>

次に、javascript (jquery を使用) のすべてのフィールドを解析して、このように ajax 呼び出しを作成します。

var my_value = $('#my_input').val();

次に、改行を取得するために置換を行いますmy_value = my_value.replace('\n', '<br>');

その後、次のように ajax で変数を投稿します。

data_to_post = 'my_field1=' + my_value1 + 'my_field2' + my_value2;

$.ajax({  
type: 'POST',  
url: '/write_to_db.php',  
data: data_to_post
});  

現在、私のサイトの多くの人々がプログラミングについて話し、そのコンテンツが私のサイトを台無しにし始めました。投稿コンテンツが php または html 形式として解析されるためです。サイトのコードを台無しにする可能性のある問題のある文字をすべて置き換えることを計画しています。 .

最も問題のある式は、html タグと &= です。これは、投稿変数をまとめる方法に干渉するためです。

これらの文字はコンテンツに必要なので、単純にすべてを 1 文字に置き換えることはできません。

それらをエスケープする方法はありますか(せいぜい1行のコマンドで)?

ありがとう!

更新:私の一時的な解決策はこれです:

this_string = this_string.replace(/</g, '&#60;');
this_string = this_string.replace(/>/g, '&#62;');
this_string = this_string.replace(/\n/g, '<br>');
this_string = escape(this_string);
4

7 に答える 7

1

フォーム要素自体に$.serializeJSON()を使用して、フォーム全体のすべての値を収集します。次に、AJAX呼び出しを介してサーバー側スクリプトに送信します。プレーンテキストだけでなくコードも可能にする複雑なコメントやテキストフィールドの解析などのタスクは、サーバー側の言語に任せたほうがよいでしょう。

于 2012-05-17T23:23:40.850 に答える
1

javascript 関数 escape() を試してください: http://www.w3schools.com/jsref/jsref_escape.asp

data_to_post = 'my_field1=' + escape(my_value1) + 'my_field2' + escape(my_value2);

編集:

人々が投稿することを許可されていない HTML 文字を処理するには、次のように php を実行できます。

$outputstring = "hi<br />bye!";
echo htmlspecialchars($outputstring);

これがどのように機能するかについての情報: http://php.net/manual/en/function.htmlspecialchars.php

于 2012-05-17T23:51:50.707 に答える
0

あなたの意図は私には完全には明確ではありませんが、式をタグでラップすることにより、プログラマーのコンテンツを保持し、キャリッジリターン/ラインフィードを表示することができます。

もう1つの可能性は、CSSを使用して外観のスタイルを設定することです。この投稿への回答を見てください。特定のキャリッジリターンラインフィードの後に​​ダッシュを<br/>に置き換えるにはどうすればよいですか。

于 2012-05-17T23:24:44.517 に答える
0

HTML文字を保持するためにHTML文字をエンコードしたいだけのように思われるので、この場合、次のようにテキストが正しくエンコードされます。

var textVal = $('#my_input').val();
var encoded = $('<div/>').text(textVal).html();  

これにより、エンコードに役立つメモリ内divが作成されます。デコードするには、div呼び出しを次のように変更するだけです。

  var unencoded = $('<div/>').html(textVal).text()
于 2012-05-17T23:30:43.850 に答える
0
$.ajax({  
type: 'POST',  
url: '/write_to_db.php',  
data: {
   'my_field1': my_value1,
   'my_field2': my_value2
}
}); 

文字列の代わりにデータでオブジェクトを渡します。jquery はそれを行います。

于 2012-05-18T03:24:00.513 に答える
0

次の例のように、PHP ハンドルを作成することを検討しましたか?

nl2br(htmlspecialchars($str,ENT_QUOTES,'UTF-8'));
于 2012-05-17T23:53:11.640 に答える
0

どうですか:

my_value = my_value.replace(/\n|\.|\~/g, '<br>');

| の周りに置換する文字を配置します。(OR) セパレーターで、末尾に /g フラグを付ける

于 2012-05-17T23:20:29.977 に答える