Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过HTML将复杂变量传递给javascript的正确方法_Php_Javascript_Html_Json - Fatal编程技术网

Php 通过HTML将复杂变量传递给javascript的正确方法

Php 通过HTML将复杂变量传递给javascript的正确方法,php,javascript,html,json,Php,Javascript,Html,Json,我试图摆脱使用PHP的htmlentities,以下是我停止使用的地方: <?php echo '<img ... onclick="MP.view(\''.$i->name.'\') />'; ?> 在这种情况下,正确的方法是: htmlspecialchars(json_encode($var), ENT_QUOTES, "UTF-8") 将任何双引号转换为正确的HTML转义,使生成的字符串适合大多数属性。ENT\u QUOTES参数也处理单引号;但是,在

我试图摆脱使用PHP的htmlentities,以下是我停止使用的地方:

<?php
echo '<img ... onclick="MP.view(\''.$i->name.'\') />';
?>

在这种情况下,正确的方法是:

 htmlspecialchars(json_encode($var), ENT_QUOTES, "UTF-8")

将任何双引号转换为正确的HTML转义,使生成的字符串适合大多数属性。
ENT\u QUOTES
参数也处理单引号;但是,在您的示例中,您可能不需要这样做。

传递数据所需的转义(和字节数)要少得多,如下所示:

echo '<script>var myObj = '.json_encode($i).'</script>';
echo '<img ... onclick="MP.view(myObj)" />';
echo'var myObj='.json_encode($i)。”;
然后,您的代码可以更像这样:

echo '<script>var myObj = '.json_encode($i).'</script>';
echo '<img ... onclick="MP.view(myObj)" />';
echo';

为什么不直接传递要查看的图像的URL?这将有助于了解MP.view的作用……假设MP.view的作用相当复杂,图像的URL所起的作用较小。基本上我需要传递大量的数据,在这种情况下使用htmlspecialchars可能是最好的,对吧?@Frank:我从来都不需要它。不过,您可能希望将其包装在CDATA标记中。@Mikhail:您也可以在循环中创建脚本。只需将索引添加到您正在创建的对象的名称中,然后在onclick处理程序中使用它。@Mikahi:这只是一个示例。您可以轻松地更改脚本内容以创建一个变量,即数组,然后从onclick处理程序中使用该数组。然后接收函数将接收一个字符串,no?Ehm,no。转义仅用于HTML属性的有效性。所以双引号不会与DOM结构冲突。但是您放在那里的JSON表达式仍然可以是一个对象。浏览器会小心地将原始JSON/object传递给回调函数。这允许我在传递的对象中加入额外的信息,这样函数就可以只接收一个参数而不需要传递UTF-8,因为htmlspecialchars不涉及非ascii字符