从MySQL DB中获取脚本标记内的PHP数据,以便与Javascript一起使用


Getting PHP data from MySQL DB inside script tag for use with Javascript

这类似于PHP在Javascript破解脚本中生成的内容,但我无法理解我错在哪里。

这是简报。我试图将MySQL数据库中的10个字符串输出到一个javascript数组s中(s[1]到s[10])(存储在一个MySQL表中的pt1到pt1-info列下,这样代码对所有人来说都是可以理解的)。(注意$apos只是一个撇号字符串,这里不关心)。

<?php 
echo "<script>'n";
echo "var s = [];'n";
 for($i=1;$i<=10;$i++) {
 echo "s[".$i."] = ".$apos.$r['pt'.$i].$apos.";'n"; 
 } 
echo "</script>";
 ?>

当我在浏览器中通过"查看源代码"查看源代码时,它会生成正确的代码:

<script>
var s = [];
s[1] = 'a';
s[2] = 'b';
.
.
s[10] = 'j';
</script>

然而,这不能作为脚本工作(这意味着,如果我在谷歌开发工具中查看,并点击"script"标记元素中的内容,就会在下面的栏中被告知是"text",而不是"script")。

然而,如果我删除PHP,并以相同的方式手动编写整个脚本,它就可以正常工作。我已经尝试删除PHP代码中的换行符,但仍然存在相同的问题。

PHP中的某些东西破坏了脚本。你能帮忙吗?

我的最佳猜测是,您的一个(或多个)字符串包含一个破坏PHP输出的字符(如撇号)。尽管如此,Passery已经在您的评论部分提出了最佳解决方案:

echo '<script>';
echo 'var s = ' . json_encode($info);
echo '</script>';

我认为您可能误解了开发工具。当我仔细观察Chrome时,它确实将您的脚本标识为文本,可能是因为默认类型是text/javascript。在<script>标记上放置显式类型声明没有任何更改。

但是,当我在for循环之后添加echo "alert('s[1]='+s[1]);";时,会显示警报,并且我可以使用调试器查看其他s[I]的值。

换句话说,我认为您生成的JavaScript一直有效。

我知道你已经用另一种方法解决了这个问题。我发布这个答案只是为了防止它对其他人有所帮助。

以下是我用于测试的内容:

<?php 
$a = "-abcdefghij";
$apos="'";
echo "<script type='"text/javascript'">";
echo "var s = [];";
for($i=1;$i<=10;$i++) {
 echo "s[".$i."] = ".$apos.$a[$i].$apos.";'n"; 
} 
echo "alert('s[1]='+s[1]);";
echo "</script>";
?>