0

PHP と MySQL を使用して製品をループし、Javascript 関数を呼び出す onClick イベントを含む img タグで構成される HTML コードを生成しています。onClick イベントを介して PHP 変数を Javascript 関数に渡したいと考えています。私は jQuery を使用していますが、PHP の json_encode() 関数と jQuery の jquery-json プラグインを使用することをお勧めします。

私のPHPコードは次のようになります。

$onclick = json_encode(array(
  'productid' => $productsRow['ProductID'],
  'description' => $productsRow['Description']
));
echo "<a href=\"javascript:;\" onClick=\"changepic('" . htmlentities($onclick) . "')\">";
echo "<img src=\"products/$thumbnailfilename\" width=\"100\" height=\"100\">";
echo "</a>";

ご覧のとおり、私の Javascript 関数は changepic() と呼ばれます。この質問に関係のないコードを少し省略しました (つまり、データベース アクセス コードとサムネイル画像の場所の決定)。

私のJavascriptコードは次のとおりです。

function changepic(productarray) {
  var productid = $.evalJSON(productarray).productid;
  var productdesc = $.evalJSON(productarray).description;
  alert(productid);
}

Javascript 配列に渡す PHP 変数については、まだ実際には何もしていません。最初にそれを機能させようとしているだけです。私の最終的な目標は、jQuery を使用して製品の説明を<div>

サンプルの製品詳細は次のようになります。

ProductID: 30c7508008ac7597619ad9b90a97b40f
Description: <p>Wide and Narrow Bands<br>
Set with Top-Quality Diamonds</p><p>

ご覧のとおり、説明には HTML コードと、<br>タグの後の改行が含まれています。

生成される HTML は次のようになります。

<a href="javascript:;" onClick="changepic('{&quot;productid&quot;:&quot;30c7508008ac7597619ad9b90a97b40f&quot;,&quot;description&quot;:&quot;&lt;p&gt;Wide and Narrow Bands&lt;br&gt;\r\nSet with Top-Quality Diamonds&lt;\/p&gt;&quot;}')"><img src="products/tn-30c7508008ac7597619ad9b90a97b40f.jpg" width="100" height="100"></a>

これを実行すると、Javascript エラーが発生します。

Event thread: click
Uncaught exception: SyntaxError: JSON.parse: Unescaped control char in string: "<p>Wid
Error thrown at line 18, column 2 in changepic(productarray) in http://isis/carats/view-collection.php?collectionid=32d0c7b8774f7f82a2d7c7d053286cfc:
var productid = $.evalJSON(productarray).productid;
called from line 1, column 0 in <anonymous function>(event) in http://isis/carats/view-collection.php?collectionid=32d0c7b8774f7f82a2d7c7d053286cfc:
changepic('{"productid":"30c7508008ac7597619ad9b90a97b40f","description":"<p>Wide and Narrow Bands<br>\r\nSet with Top-Quality Diamonds<\/p>"}')

私が見たところ、JSON 文字列のエンコードに何か問題がありました。私はいくつかのグーグルを実行し、エンコーディングは必要ないと言う人を見つけました (私はそれを試してみましたが、製品の説明は HTML として取得され、ページに表示されました)。

evalJSON() で使用する前に、Javascript 関数でデコードする必要がありますか?

4

3 に答える 3

0

なぜあなたがそんなに混乱しているのか理解できません..ここに解決策があり、それは機能します

$onclick = json_encode(array(
'productid' => $productsRow['ProductID'],
'description' => $productsRow['Description']
));
echo "<a id='test' href='' var='$onclick'>";
echo "<img src=\"products/$thumbnailfilename\" width=\"100\" height=\"100\">";
echo "</a>";

これがあなたのjqueryです:

$(function(){

   $("#test").click(function(){
   var img = jQuery.parseJSON(($(this).attr("var")));
   alert(img.description);
});

});

json オブジェクトがあるので、div タグを作成して変数を内部に配置するか、既存の div タグにコンテンツを配置できます。私はあなたがここで何をすべきかを知っていると確信しています.

ディンス

于 2012-11-09T05:09:31.030 に答える
0

JSON を使用する必要はまったくありませんでした。

PHPコードを次のように変更することで、これが機能しました。

$productid = $productsRow['ProductID']
$description = rawurlencode($productsRow['Description']);
echo "<a href=\"javascript:;\" onClick=\"changepic('$productid','$description')\">";

次に、私のJavascriptは次のようになります。

function changepic(productid, description) {
    description = decodeURIComponent(description);
    alert(description);
}

これで問題なく動作するので、引き続き Javascript 関数で実際に役立つことを実行できます。

于 2012-11-11T22:30:52.367 に答える
0

普段はこれだけですが、

var foo = <?php echo json_encode($foo); ?>;

json_encodeそして、これがその仕事をしている限り、これがどのような種類の「インジェクション」攻撃を引き起こす可能性があるのか​​ 、実際にはわかりません.

于 2012-11-09T05:04:08.170 に答える