在 JavaScript 中嵌入 php 变量时出现“语法错误:未终止的字符串文字”错误
"SyntaxError: unterminated string literal" error when embedding php variable in javascript
简单的嵌入,我不明白为什么会出现此错误。
在动作类中...
$TESTME = "what";
在视图中....
<script type="text/javascript">
$(document).ready(function () {
var someVale = "<?php echo $TESTME; ?>";
alert(someVale);
});
</script>
错误指向变量赋值第一个引号之后
即. var someVale = "
....
您需要检查$TESTME
的内容。它包含换行符或双引号。您看到的错误通常表示有问题的字符串在几行中被断开,或者引号的数量不匹配。
在您的情况下,可能是换行符...
var someVale = "< br />
<tag>
<tag>
<tag>";
这显然是行不通的,你需要处理字符串,这样你最终会得到......
var someVale = "< br />'n<tag>'n<tag>'n<tag>";
你可以用类似的东西转换你的PHP变量。
$TESTME = str_replace(chr(13), "'n", $TESTME);
(根据所涉及的操作系统,换行符也可能是chr(13) . chr(10)
。
大多数情况下,您可以使用回显变量,但有时这些回显字符串包含行终止符或引号(也称为字符串分隔符)。你可以测试,再测试,但你只需要保护自己免受"恶意"和"不可预测"的输入。在这个答案中,我使用了单引号和双引号
你可以str_replace
或urlencode
你的琴弦,这将解决你的问题,但老实说......json_encode
到底有什么问题?它非常适合服务器<>客户端数据,就像你正在使用的那样:
var someVal = JSON.parse(<?= json_encode(array('data' => $someVar));?>).data;
所有需要转义的字符都将被转义...工作完成,并使用"本机"PHP 函数。
更新:
如下面的注释所示,由于范围问题,这可能是一个PHP错误。您应该声明一个属性,而不是在类中声明变量:
class Foo
{
public $theProperty = null;
public function __construct($argument = null)
{
$this->theProperty = $argument;//assign a variable, passed to a method to a property
$someVar = 123;//this variable, along with $argument is GC'ed when this method returns
}
}
//end of class
$instance = new Foo('Value of property');
echo $instance->theProperty;//echoes "value of property"
$anotherInstance = new Foo();//use default value
if ($anotherInstance->theProperty === null)
{//is true
echo 'the property is null, default value';
$anotherInstance->theProperty = 'Change a property';
}
这基本上就是它的工作原理。我不知道你如何使用你的视图脚本,所以下面的代码可能不适用于你的情况(这是你可以在 Zend 框架中在控制器中做的事情):
public function someAction()
{
$instance = new Foo('Foobar');
$this->view->passedInstance = $instance;//pass the instance to the view
}
然后,在您的视图脚本中,您将执行以下操作:
var someVal = JSON.parse('<?= json_encode(array('data' => $this->passedInstance->someProperty)); ?>').data;
但是为了让我的答案在你的情况下起作用,我必须看看你是如何渲染视图的......您使用的是框架吗?您使用的是经典的 MVC 模式,还是视图脚本只是您include
的东西?
- 错误:语法错误,无法识别的表达式:不支持的伪:无效/RectJS/Unit Testing
- 未捕获错误:语法错误,无法识别的表达式:input[@type=submit]
- jQuery AJAX Post方法错误(语法错误)
- 如何“;修复解析错误:语法错误,意外'{'in”用于php
- 错误:错误:语法错误,无法识别的表达式:
- 未捕获错误:语法错误,无法识别的表达式:ajaxsample/update_agenda(CodeIgniter)
- 未捕获错误:语法错误,无法识别表达式Jquery选择器单引号与双引号
- Javascript ( jQuery ) 错误: 语法错误: 缺少 ) 在参数列表之后
- 错误:语法错误:令牌“”,“”是意外的标记
- 未捕获的错误:语法错误,无法识别的表达式:输入:复选框[名称=ninja_forms_field_57[术语]]
- 未捕获的错误:语法错误,无法识别的表达式:“.b-brand-box”
- 未捕获的错误:语法错误,无法识别的表达式:href
- ReactJS 返回解析器错误语法错误:在 AJAX 调用 JAVA servlet 后出现意外的标记 a
- jQuery:未捕获错误:语法错误,无法识别的表达式
- j查询错误 - 语法错误:缺少:在属性 ID 之后
- 在使用 Gulp 在 javascript 中声明对象时,在 Git bash 中出现以下错误“语法错误:意外标识符”
- 获取未捕获错误:语法错误、无法识别的表达式
- 获取错误语法错误:属性列表 url 后缺少 }:http://localhost/mcportal/public/pos
- 为什么我收到错误“语法错误:非法字符”
- 未捕获错误:语法错误,无法识别的表达式