-1

dataPHPで生成した動的コンテンツがあり、さまざまなテキストを属性に格納したいと思います。問題は、HTML全体に損傷を与える可能性のあるさまざまな文字をエスケープする必要があることです。

したがって、phpで何らかのエンコードを行い、そのデータを使用するときにjavascriptでその文字列をデコードする必要があります。これを行うための最良の方法は何でしょうか?

そして、明確にするために、入力などを使用したくないので、このデータをさまざまな要素に保存する必要がありaますdiv

4

1 に答える 1

2

データをJavaScriptに渡すだけの場合は、変数に直接書き込むだけではどうでしょうか。

<html>
<head>
<script>
var data = <?php echo json_encode($data); ?>
</script>
<!-- etc. -->

とにかく、自分のやり方でやりたい場合htmlspecialcharsは、HTML属性に入れる前に任意のデータをエスケープするために使用できます。

<div data="<?php echo htmlspecialchars('"\'!)(@UI#_!)(@JP_!()@J'); ?>">Example</div>

次にJavaScriptでそれを読むと、HTMLエンコーディングを理解するはずなので、読むために特別なことをする必要はありません。

データがより複雑であるがバイナリではない場合は、JSONエンコードしてから、次を使用できhtmlspecialcharsます。

<?php
$data = array();
$data["a"] = 123;
$data["b"] = "example";
$jsonData = json_encode($data);
$escapedJsonData = htmlspecialchars($jsonData);
echo "<div data=\"$escapedJsonData\">example</div>";
?>

次に、 JSON.parseを使用してJavaScriptでそのデータを読み取ることができます。

var yourDiv = getDivSomehow();
var data = JSON.parse(yourDiv.getAttribute("data"));

データがバイナリの場合は、base64でエンコードできます。

<?php
$data = someImage();
$encodedData = base64_encode($data);
echo "<div data=\"$encodedData\">example</div>";
?>

おそらく、JavaScriptでこれをデコードする方法がいくつかあります。

于 2012-12-19T21:00:51.693 に答える