Как встроить двойные кавычки в интерполяцию Twig?

Я пытаюсь заменить sprintf(' href="%s%s"', ..., ...) из файла PHP в его альтернативу Twig. Я хотел бы использовать функцию интерполяции Twig, но строковое выражение должно быть заключено в двойные кавычки и содержит встроенные кавычки, окружающие значения атрибута href.

Есть ли способ сделать это? Документы кажутся довольно легкими в этом отношении.

{{ " href="#{value1}#{value2)"" }}

1

Решение

Если вы хотите включить " вам нужно сбежать от персонажа

{{ " href=\"#{value1}#{value2)\"" }}

Но это не очень хорошая идея

Лучший способ — включить ваше значение непосредственно в атрибут, например:

<a href="{{url}}">Some link</a>

И, конечно же, вы можете использовать конкатенацию

<a href="{{value1~value2}}">Some link</a>
5

Другие решения

Лучшие решения это:

href="{{value1}}{{value2}}"

При этом и значения1, и значения2 будут безопасно экранированы в отношении специальных символов HTML. И ваши двойные кавычки будут прямо поставлены.

Почему ваш метод плохая практика:

Что вы хотите сделать, это (эти два эквивалентны):

{{ " href=\"#{value1}#{value2}\"" }}

Или же

{{ ' href="'~value1~value2~'"' }}

Сделав это, он избежит двойных кавычек href и интегрирует их в конкатенацию.

Но поскольку конкатенация находится в {{…}} ветке, она также будет экранировать все результирующие двойные кавычки с автоэкспонированием HTML, они будут заменены на &quot;,

Вы можете отключить это автоэкранирование html так:

{{ 'href="'~value1~value2~'"' | raw}}

Но тогда это опасно, потому что value1 и value2 больше не будут экранированы html, и вы будете подвержены инъекциям XSS.

5

По вопросам рекламы [email protected]