Closed vitkarpov closed 10 years ago
Там, видимо, проблема в названии функции ) Все эскейпится автоматически, так что то, что ты хочешь, это:
"<h1>Hello, words!</h1>"
А функция html()
наоборот, выводит что-то без эскейпинга. Это как в xslt было disable-output-escaping
.
Да, мне действительно нужно использовать именно html. Поясню:
Есть функция, которая возвращает строчку. Назовем ее i18n_unsafe
. Пусть эта функция при определенном наборе значений аргументов возвращает: <h1>Hello, words!</h1>
.
Мне нужно вставить это в шаблоне, так что в итоге браузер вывел это как текст, а не парсил как html (строчка возвращается честно заэкранированной).
Я думал, что html
в данном случае выведет как есть: дали строку с эскпейпингом, выведет с эскейпингом и в итоге будет то, что нужно.
А, я понял. Смотри:
match / {
html( .foo )
}
nop@deirdre ~/reps/yate-master (master)$ ./yate a.yate '{ foo: "<h1>Hello, words!</h1>" }'
<h1>Hello, words!</h1>
Все ок. Но когда ты пишешь вот так:
match / {
html( "<h1>Hello, words!</h1>" )
}
то тут да, тут в строках резолвятся энтити. Но когда у тебя данные откуда-то еще, то там все ок.
Т.е. получается сработает так:
// foo == "<h1>Hello, words!</h1>"
foo = i18n_unsafe(...)
html(foo)
?
И так энтити резолвится не будут?
Да, ну ты попробуй и проверь, делов-то :)
Энтити резолвятся при компиляции только. Т.е. в строковых константах ( "...."
) в шаблонах только.
В динамических данных ничего не резолвится, там только эскейпинг.
:+1: Спасибо
В итоге парсится как html в обоих случаях. Это предполагаемое поведение? Ожидал во втором случае увидеть строку безопасно отображающуюся как текст в браузере.