Каков самый безопасный способ передачи аргументов с серверного PHP на клиентский JavaScript

В моем приложении я сильно полагаюсь на JavaScript для улучшения пользовательского интерфейса, но все данные поступают из базы данных и обрабатываются PHP. По умолчанию я использую выражения «эхо» для подстановки необходимых значений «точно вовремя» следующим образом:

var myVariable = <?php echo $myVariableInPHP ?> 

Это, однако, не кажется мне очень элегантным, и меня беспокоит стабильность и ремонтопригодность такого кода.

Есть ли у меня какие-то альтернативы?

Для серверной части я использую фреймворк Symfony 1.4 PHP.

Благодаря,

Solutions Collecting From Web of "Каков самый безопасный способ передачи аргументов с серверного PHP на клиентский JavaScript"

Мой любимый способ:

 <?php $var = array( 'prop1' => 'value1', 'prop2' => 'value2', // ... ); ?> <script type="text/javascript"> var varNameSpace = <?php echo json_encode($var); ?>; alert( varNameSpace.prop1 ); // -> 'value1' </script> 

Использование json_encode() гарантирует, что значения, переданные в Javascript, будут экранированы и хорошо отформатированы. Использование общего контейнера переменной также предотвращает использование глобального пространства (окна).

Вы можете использовать JSON для этого, это очень просто использовать как в PHP (проверьте json_encode() ), так и JavaScript.

Это безопасно использовать в <script> -Tags и браузерах, которые понимают JavaScript. Обратите внимание, что функция PHP не кодирует < и > .

Некоторые примеры PHP:

 $user = (object) array("name"=>"Joseph", "age"=>29, "email"=>"asdf@example.net"); echo '<script type="text/javascript"> var user = '.json_encode($user).'; </script>'; 

Я бы попытался использовать JSON. Вот ссылка для вас на php.net, объясняющую, как это сделать.

http://php.net/manual/en/book.json.php

Первое из ваших решений действительно работает, но не рекомендуется смешивать код на стороне клиента с кодом на стороне сервера. Лучше всего поместить javascript в отдельные .js-файлы (в нем нет PHP)

Сначала я бы создал API (написать документацию), например,

 GET http://localhost/getProfile?username=$username POST http://localhost/getProfile/$username 

Он будет возвращать JSON-объект, используя json_encode. Вы можете использовать json-p для междоменной связи. Тогда, например, из Jquery вы можете легко получить данные.

Таким образом, ваш javascript останется чистым.

Я предпочитаю use_dynamic_javascript() помощник. «Плохая» вещь заключается в том, что вам нужно немного подумать о том, чтобы разделить шаблон рендеринга и настроить его на отдельные запросы.