大多数时候,您可以避免使用回显变量,但有时这些回显字符串包含行终止符或引号(也称为字符串分隔符)。你可以测试,再测试,但你只需要保护自己免受“恶意”和“不可预测”的输入。在这个答案中,我使用了单引号和双引号
你可以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 Framework 中的控制器中执行的操作):
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
?