ほとんどの場合、変数をエコーすることで回避できますが、エコーされた文字列に行末記号または引用符 (別名、文字列区切り記号) が含まれることがあります。テストを繰り返すことはできますが、「悪意のある」「予測不可能な」入力から身を守る必要があります。この非常に答えで、私は一重引用符と二重引用符の両方を使用しました。問題を解決する
ことができますが、正直なところ...一体何が間違っています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
か?