var x = <?php echo('This is a value');?>
Э-э, нет, это закончится как:
var x = This is a value
(синтаксическая ошибка.) Вы хотите:
var x = <?php echo json_encode('This is a value', JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT);?>
HEX_TAG, экранирующий в PHP 5.3, позволяет избежать проблем с последовательностью </
, появляющейся в блоке <script>
. Кодирование AMP и QUOT необходимо, чтобы гарантировать отсутствие проблемных символов "
и &
, когда вы помещаете код в значение атрибута, ограниченное "
или блоком сценариев не-CDATA XHTML. Если вы когда-либо используете только блок сценариев HTML (или блок сценариев XHTML CDATA), вы можете обойтись без них (хотя они также не причиняют вреда).
json_encode
также с радостью закодирует массив значений для помещения в переменную JS, а не просто строку.
More problem come when we want to take off all JavaScript from pages to move everything on external JavaScript file.
Хорошей идеей будет поместить весь ваш статический код, включая код, привязанный к слушателям событий, во внешний файл JavaScript. Однако постраничные данные должны по-прежнему оставаться на странице либо в соответствующих атрибутах самого документа (например, имена классов для ненавязчивых сценариев), либо в простом блоке <script type="text/javascript">var data= ...;</script>
без другого кода.