我读了几篇关于这个问题的帖子,发现这是最简单的解决方案,下面是我的代码:
PHP代码中的js
<script>
<!--//
var jsBaseurl = <?php echo json_encode(BASE_URL."/"); ?>;
var jsTitle = <?php echo json_encode($h1_title); ?>;
var jsSubtl = <?php echo json_encode($h2_title);?>;
//-->
</script>
<script src="external.js"></script>
以及外部。js
var siteURL=jsBaseurl;
alert(siteURL+jsTitle+jsSubtl)
它运行良好,我的问题是关于彭日成和比普拉夫的以下评论:
警告:这可能会杀死你的网站。例子:
<?php $myVarValue = '<!--<script>'; ?>
详见这个问题。解决方法:利用JSON_HEX_TAG逃生
另一个缺点是会影响初始页面加载时间。-比普拉夫
我想知道Pang评论的一个简单解决方案,以及这一切对性能(页面加载时间)的影响。非常感谢!
很确定这不会破坏它。json_encode
的全部要点是转储是安全的。
>
示例1
考虑这段简单的代码。
<script>
<?php $myVarValue = 'hello world'; ?>
var myvar = <?php echo json_encode($myVarValue); ?>;
alert(myvar);
</script>
输出:
<script>
var myvar = "hello world";
alert(myvar);
</script>
它提醒Hello world
。好。
示例2
让我们尝试使用
<script>
<?php $myVarValue = '</script>'; ?>
var myvar = <?php echo json_encode($myVarValue); ?>;
alert(myvar);
</script>
输出:
<script>
var myvar = "<\/script>";
alert(myvar);
</script>
它发出警报
如您所见,斜杠(
/
)被正确转义为\/
,
示例3
现在,考虑这个非常特殊的字符串:<代码>
<script>
<?php $myVarValue = '<!--<script>'; ?>
var myvar = <?php echo json_encode($myVarValue); ?>;
alert(myvar);
</script>
输出:
<script>
var myvar = "<!--<script>";
alert(myvar);
</script>
令人惊讶的是,它不会发出任何警报,错误控制台中也没有任何内容。什么
如果检查JSON的规范,
图片改编自json.org
要得到一个完整且解释得很好的答案,请阅读这个令人惊讶的问题
我自己做了几个简单的测试。浏览器实际上忽略了
之后的所有内容
而且
如果你在$myVarValue
中不仅有一个字符串,而且有一个像数组这样的复杂对象("key"=
解决方案是什么?使用
JSON\u HEX\u标记来转义
<script>
<?php $myVarValue = '<!--<script>'; ?>
var myvar = <?php echo json_encode($myVarValue, JSON_HEX_TAG); ?>;
// ^^^^^^^^^^^^^^
alert(myvar);
</script>
输出:
<script>
var myvar = "\u003C!--\u003Cscript\u003E";
alert(myvar);
</script>
它发出警报
因为没有更多的
注意:如果你不打印成代码,你不需要
JSON_HEX_TAG
[1]这里,“ok”仅表示它不受
事实上,这很明显。如果获取
$myVarValue
的值所需的时间很长(例如,您正在从数据库获取大量数据),PHP将不得不等待,浏览器和用户也需要等待。这意味着初始页面加载时间更长。如果您稍后使用Ajax加载数据,他们不必等待看到初始结果,但是,Ajax调用将是一个额外的HTTP请求,因此这意味着服务器的工作负载将增加,网络的负载也将增加。
当然,每种方法都有其优缺点,所以你必须决定。我建议读这篇优秀的Q
我时不时地要把一些变量从PHP传递到JS脚本。现在我是这样做的: 但这是非常难看的,而且我不能将我的JS脚本隐藏在.JS文件中,因为它必须由PHP解析。处理这个问题的最佳解决方案是什么?
问题内容: 我正在使用Google Maps制作可以加载数据库中包含经纬度数据的标记的地图。我希望用户可以通过单击按钮来加载三个不同的“图层”。单击该按钮时,将在服务器上执行php函数,从而根据数据库中的信息创建xml文件。然后调用AJAX函数提取此xml数据,然后将其用于创建地图标记。没有为每个“层”使用单独的PHP函数(除了SQL查询所在的行,这是相同的东西),有没有办法将AJAX中的java
问题内容: 目前,我在隐藏的输入字段中回显某些变量,并在需要时使用Javascript读取它们。 我和一个同事现在正在考虑使用PHP生成一个额外的Javascript文件,该文件仅包含Javascript的所有变量。这样,变量已经存在,HTML中没有多余的代码。 有什么好的方法可以将变量从PHP传递到Javascript?我们的解决方案听起来如何? 问题答案: 通用数据传递 JavaScript常
问题内容: 我有一个PHP会话变量,在整个会话过程中仍然有效。在开头部分,我包含了我的JavaScript文件。 如果需要以下内容,如何将会话变量传递到JavaScript文件中。 由于无法在JavaScript文件中识别出,因此上面的代码不起作用。因此,我必须放入PHP文件本身,但是如何将其保留在JavaScript文件中? 问题答案: 在您的PHP文件中,您可以将用户设置为全局变量: 在包含外
问题内容: 如何在不刷新页面的情况下将变量从jQuery传递到PHP?当我单击一个复选框时,我想将一个变量从jQuery传递到PHP。我也在使用formdialog。 我的PHP代码 我的JavaScript代码 问题答案: Ajax可以做到这一点。谷歌它,并检查api.jquery.com并查看ajax函数,.ajax(),.post(),.get(),.load()等。 关于您的特定问题,这是
问题内容: 我有一个用JS计算的值,希望将其作为输入表单的一部分传递给PHP脚本。我如何将JS值的JS值作为POST参数获取? 基本上,在提交时,我需要将var通过post传递到下一个脚本。 想到的第一个想法是创建一个不可见的输入表单,该表单中包含值并与该表单一起输入,这可能吗? 问题答案: 是的,您可以在JavaScript代码中使用和设置该隐藏字段的值,以便将其与其他表单数据一起发布。