1

検証スクリプトに取り組んでいますが、非常に特定の問題に直面しています。

ユーザーがたまたまエンコードされた html 文字 (&または など&) である文字列を入力すると、文字 (この場合は &) として出力されます。私の質問はこれです: 文字列がエンコードされた文字であるかどうかを判断する関数を書くことは可能ですか? したがって、ユーザーが上記の 2 つのオプションのいずれかを入力した場合、特定の機能を起動し、それがエンコードされていない文字である場合は、別のことを実行したいと考えています。

これを行う方法はありますか?

4

3 に答える 3

3

定義上、何かがエンコードされたHTMLエンティティであるかどうかわからない場合は、わかりません。特定のソースからのすべてのテキストをエンコード済みまたはエンコードされていないものとして扱います。なんで?それはすべて単なるテキストだからです。「&」単なるテキストです。「& amp ;」と書くつもりでした ここ。誰にも解釈してほしくない、文字通り「&」として表示してほしい。

ユーザーが何を意味していたかをどうやって知るのですか?推測に基づいてユーザーが入力したテキストを置き換え始めている場合は、常にそれを台無しにする場合があります。これは、すべての「:D」がグラフィカルなスミリーに置き換えられる典型的なケースです。これは、実際に「:D」と入力したいときに煩わしいものです。

ユーザーが入力した内容を常に正確に保持したい場合は、すべての特殊文字をエンティティに置き換えるHTMLエンコード関数を使用してすべてのユーザー入力を常に実行してください。Great Escapism(または:テキスト内のテキストを操作するために知っておくべきこと)を参照してください。

于 2012-12-04T13:01:24.610 に答える
1

エンコードされた長さとデコードされた長さを比較することで、文字列にエンコードされた文字が含まれているかどうかを確認できます。

var string = "Your encoded & decoded string here"

function decode(str){
    return decodeURIComponent(str).replace(/&lt;/g,'<').replace(/&gt;/g,'>');
}

if(string.length == decode(string).length){
    // The string does not contain any encoded html.
}else{
    // The string contains encoded html.
}

また、これは提案されたjQueryメソッドよりも大幅に高速です。

于 2012-12-04T12:57:07.783 に答える
0

このような何かがそれをするでしょう。

function containsEncoded (val){
    var rHTMLEncoded = /&[^\s]*/;

    return rHTMLEncoded.test(val) ;
}


// Usage 
var encoded = containsEncoded("&amp;");
于 2012-12-04T13:01:49.737 に答える