-1

我有使用 PHP 生成的动态内容,我想在data属性中存储一些不同的文本。但是问题是我需要转义可能损坏整个 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 回答