2012-03-05 8 views
0

私はちょうど「正しい」答えも見つけられないという単純な問題です。PHPからJavaScript関数へのアポストロフィを使用した文字列の受け渡し

データベースから人の名前を読み込んでテーブルに表示するPHPスクリプトがあります。各行では、私はタイトルのように、人の名前でポップアップ表示されるJavaScript関数に人の名前をハイパーリンクされている - PHPコードをし、結果のHTMLは次のとおりです。HTMLで

$name = $results['name']; 
echo '<a href="javascript:void(0)" onclick="popup(this, '\' . $name . '\')">' . $name . '</a>'; 

<a href="javascript:void(0)" onclick="popup(this, 'Steve Smith')">Steve Smith</a> 

「Bryce D'Arnoud」のようなハイフンを持つ名前にヒットした場合を除いて、すべてがうまく動作します。その結果、アポストロフィがHTMLを破ります。 HTMLで

$name = $results['name']; 
echo '<a href="javascript:void(0)" onclick="popup(this, '\' . addslashes($name) . '\')">' . $name . '</a>'; 

:この問題を回避するために、私は次のコードで& htmlの結果、PHP addslashes()機能を使用しています

<a href="javascript:void(0)" onclick="popup(this, 'Bryce D\'Arnoud')">Bryce D'Arnoud</a> 

すべての機能罰金を、いくつかの理由のためには、JavaScript私は名前を警告する場合は、エスケープ文字を削除し、ポップアップで()関数ではありません、私は「ブライスD \ 'Arnoud」を参照してください

function popup(t, name) { 
    alert(name); 
} 

任意の提案どこが間違っているのか?

答えて

4

マークアップにJavaScriptを混ぜていないと、人生はもっと楽になります。

$name = $results['name']; 
echo '<a href="#" class="popup" data-name="' . $name . '">' . $name . '</a>'; 

そして値にアクセスする(簡潔さのために、このためにjQueryを使用しています):代わりに、PHPは、セマンティックマークアップを形成し、およびJavaScriptを使用してデータにアクセスしている

$('.popup').click(function(e) { 
    e.preventDefault(); 

    alert($(this).attr('data-name')); 
}); 

とネイティブJSで(I ):

document.getElementsByClassName('popup').onclick = function (e) { 
    e = e || window.event; 

    e.preventDefault(); 

    alert(this.getAttribute('data-name')); 
}; 
+0

興味深い...しかし、コードが有効なHTMLを生成する方法はありません、ありますか? –

+0

もちろん、 'data-'属性はHTML5の標準的な部分です。 – Eli

+0

ありがとうございます。簡単なonclick呼び出しを行うためにjQueryをロードする必要を避けることを望んでいましたが、この解決策を私の代わりにしておきます。 –

3

二重引用符をエスケープしないでください。 (テストしていません)

echo "<a href=\"javascript:void(0)\" onclick=\"popup(this,'$name')\">$name</a>"; 

EDIT:ポイントを逃しため申し訳ありません。しかし、preg_replaceを使用して、単一引用符をHTMLエンティティに置き換えることもできます。 $name内のすべてのそれらを変換する事実

echo '<a href="javascript:void(0)" onclick="popup(this,\'' . preg_replace("/'/",'&#39;',$name) . "')\">$name</a>"; 

EDIT 2はきれいかもしれません:

$name = preg_replace("/'/", '&#39;', $results['name']); 
echo "<a href=\"javascript:void(0)\" onclick=\"popup(this,'$name')\">$name</a>"; 
+0

@inhan – Shaddy

+0

時間を節約してくれてありがとう!それはわたしを助ける。 –

関連する問題