私は自分のウェブサイトのスマイリー解析関数を書いています。私が達成しようとしているのは、特定の文字列を":)"
次のような画像に変換することです。
または、例として実際の html を次に示します。
":)" ===> <img src="images/smilies/smile.png" />
私の関数は本来の目的を果たしますが、ネイティブの JavaScript 関数名も解析しています! "push"
これが意味することは、文字列、"pop"
、または"some"
(おそらく他の負荷がある)を含むコメントを入力すると、関数はこれらの文字列を次のような無効な画像に解析するということです。
これを示す html 文字列を次に示します。
<img src="images/smilies/function some() { [native code] }" alt="">
これにより、ブラウザ コンソールに 404 not found エラーが表示されます。
Failed to load resource: the server responded with a status of 404 (Not Found)
なぜこうなった?ここでわかるように、コードであまり変わったことはしていません。
function parse_new_comment(commentElem){
$(commentElem).html(parse_comment($(commentElem).text()));
}
function parse_comment(comment){
var formatted_comment = "";
var smilies = new Array();
smilies[":)"] = "smile.png";
smilies[":D"] = "smile-big.png";
smilies[":p"] = "tongue.png";
smilies["[sheep]"] = "sheep.png";
smilies["<3"] = "love.png";
smilies["[love]"] = "love.png";
var words = comment.split(" ");
for (var i = 0; i < words.length; i++) {
if(smilies[words[i]] !== undefined){
formatted_comment += ' <img src="images/smilies/'+smilies[words[i]]+'" alt="" />';
}else{
formatted_comment += ' ' + words[i];
}
}
return formatted_comment;
}
if(smilies[words[i]] !== undefined){
コードのこの行が問題を引き起こしていると感じています.push
とpop
は配列関数であるため、よくわかりません.関数が失敗する理由について何かアイデアを提案していただければ幸いです.
言い忘れていましたが、私のページは ajax を使用してすべてを実行しているため、新しいコメントは次のように関数を呼び出すことで解析されます。
parse_new_comment($("#comment_343"));
ありがとうございました。