Как использовать escape для строки JSON в Smarty с PHP [duplicate]

Ваш код getElementById() работает, поскольку идентификаторы должны быть уникальными, и поэтому функция всегда возвращает ровно один элемент (или null, если ни один не найден).

Однако getElementsByClassName() , querySelectorAll() и другие методы getElementsBy* возвращают массивный набор элементов. Итерации над ним, как и с реальным массивом:

var elems = document.getElementsByClassName('myElement');
for(var i = 0; i < elems.length; i++) {
    elems[i].style.size = '100px';
}

Если вы предпочитаете что-то более короткое, рассмотрите использование jQuery :

$('.myElement').css('size', '100px');

15
задан Tom Haigh 22 May 2012 в 14:47
поделиться

5 ответов

Это должно сработать. [@ G1]

{$myarray|@json_encode}

Если включена опция $ escape_html , вам нужно будет использовать nofilter:

{$myarray|@json_encode nofilter}
67
ответ дан Abhi Beckert 22 August 2018 в 12:43
поделиться
  • 1
    Я не знал о модификаторе @! Это ответило на вопрос. – karnage 17 November 2011 в 22:47
  • 2
    Это лучший ответ. – MrBojangles 4 September 2012 в 16:17
  • 3
    В качестве примечания, чтобы передать аргументы, вам нужно числовое значение. Т.е., JSON_UNESCAPED_SLASHES - 64. Таким образом, {$myarray|@json_encode:64 nofilter} оставил бы косые черты без экранирования. stackoverflow.com/a/27806269/2418655 – dhaupin 2 May 2017 в 17:43

Вы должны использовать json_encode() в ur php-коде, а затем присваивать значение smarty с помощью функции $smarty->assign(). После этого вам нужно проанализировать это значение в файле шаблонов ur с помощью javascript.

фрагмент кода:

{literal}
<script>
var json = JSON.parse('{/literal}{$urarray}{literal}');
//another statments
</script>
{/literal}
4
ответ дан hakre 22 August 2018 в 12:43
поделиться

В то время как {$myarray|@json_encode} действительно испускает массив, закодированный в json, он также ускользает от специальных символов, что делает массив непригодным для использования в javascript.

Чтобы избежать экранирования специальных символов и также иметь возможность использовать массив в javascript используйте флаг nofilter:

{$myarray|@json_encode nofilter}
10
ответ дан m_katsifarakis 22 August 2018 в 12:43
поделиться
  • 1
    это должен быть принятый ответ. – Pierlo Upitup 22 October 2014 в 14:53
  • 2
    Это применимо только в том случае, если для вашего класса Smarty значение $ escape_html установлено равным true. Я имею в виду, что ДОЛЖЕН быть, если вы делаете это правильно, но все же. – Andrew 17 February 2015 в 23:19
{literal}
<script type="text/javascript">
<!--
var newVar ={/literal}{$myarray|@json_encode nofilter};{literal}
// -->
</script>
{/literal}

Мое решение

0
ответ дан Sarath E 22 August 2018 в 12:43
поделиться

Я ничего не знаю. Вы можете присвоить результат json_encode () переменной smarty в вашем «php-коде» с помощью $ smarty-> assign (...), а затем использовать его в своем шаблоне.

Также есть расширение Smarty для json_decode (). Нетрудно написать собственное расширение для противоположного на основе этого.

0
ответ дан Zed 22 August 2018 в 12:43
поделиться
  • 1
    Я думал, что будет такой способ, как {$ var | json_encode}, Спасибо в любом случае. – Sinan 17 August 2009 в 20:57
  • 2
    +1, идея расширения хорошая. – Sinan 17 August 2009 в 21:07
Другие вопросы по тегам:

Похожие вопросы: