我正在尝试在javascript函数中打印变量值。如果变量是一个整数($ myInteger),它可以正常工作,但是当我想访问文本($ myText)时,它会出错。
<?php $myText = 'some text';
$myInteger = '220';
?>
<script type="text/javascript">
<?php print("var myInteger = " . $myInteger . " ;\n");?> //works fine
<?php print("var myText = " . $myText . " ;\n");?> //doens't work
</script>
任何人都可以向我解释为什么会发生这种情况以及如何改变它?
答案 0 :(得分:3)
问题代码的问题在于生成的Javascript代码将缺少字符串周围的引号。
您可以手动为输出添加引号,如下所示:
print("var myText = '". $myText. "';\n");
但请注意,如果字符串本身包含引号(或换行符或其他几个字符),则会中断,因此您需要将其转义。
这可以使用addslashes()
函数来处理,但这可能仍有问题。
更好的方法是使用PHP的内置JSON功能,该功能专门用于生成Javascript变量,因此它将为您正确地进行所有转义。
您正在寻找的功能是json_encode()
。您可以按如下方式使用它:
print("var myText = ". json_encode($myText). ";\n");
这适用于任何变量类型 - 整数,字符串甚至数组。
希望有所帮助。
答案 1 :(得分:1)
如果没有更多代码,我们真的不知道你要做什么或者你得到什么错误(或从哪里得到),但如果我不得不猜测:
如果要将一串文本放入javascript变量中,则可能需要引用它。
<?php print("var myText = '" . $myText . "' ;\n");?>
---^^^-------------^^^----
// Or even better:
<?php print("var myText = '$myText' ;\n");?>
ADDENDUM 根据以下评论,如果您希望$myText
包含引号,请不要使用此标记。