2009-07-22 17 views
2

これはJavaScriptで正しくJavaScriptをエスケープする方法はありますか?

parent.document.getElementById('<?php echo $_GET['song']; ?>') 
    .innerHTML = '<img src="heart.png" onmouseover="heartOver('');" >'; 

onmouseover="heartOver('');部分は私のJavaScriptを壊す...私が行うことができないものになるかもしれませんが。私はこれを行うことができるように引用符を逃れる方法はありますか?それを検証したり消毒せずに\'

また、決してエコーユーザーデータ:

+0

あなたは、これが生成HTMLを使用する場合それは明確だろう - PHPは、この場合には、それとは何の関係もありませんが。 – Greg

+0

@ Greg:私はちょうど彼が実際に心配しているビットにそれを守った。希望を助けることができます... – Shog9

答えて

3

エスケープは、バックスラッシュと引用符を入れ子に

$song = $_GET['song']; 

// Validate HTML id (http://www.w3.org/TR/REC-html40/types.html#type-name) 
if(!preg_match('/^[a-z][-a-z0-9_:\.]*$/', $song) { 
    // Display error because $song is invalid 
} 

OR

// Sanitize 
$song = preg_replace('/(^[^a-z]*|[^-a-z0-9_:\.])/', '', $song); 
5

それは問題だけですべてです引用符を正しくエスケープする。

parent.document.getElementById('<?php echo $_GET['song']; ?>').innerHTML = 
    '<a href="heart.php?action=unlove&song=<?php echo $song; ?>" target="hiddenframe">' 
    + '<img src="images/heart.png" alt="Love!" onmouseover="heartOver(\'\');" width="16" height="16" border="0"></a>'; 

また、alt属性が不足しています。

+0

不足している終了引用符についてニースキャッチ。 – hbw

1

あなたの問題は、引用符をエスケープすることです。 'or'を\ 'または' "に置き換えると、一重引用符または二重引用符のいずれかをエスケープできます。

だからあなたのコードは次のようになります。

parent.document.getElementById('<?php echo $_GET['song']; ?>').innerHTML = '<a href="heart.php?action=unlove&song=<?php echo $song; ?>" target="hiddenframe"><img src="images/heart.png" alt="Love! onmouseover="heartOver(\'\');" width="16" height="16" border="0"></a>';

関連する問題