Я пытаюсь заменить sprintf(' href="%s%s"', ..., ...)
из файла PHP в его альтернативу Twig. Я хотел бы использовать функцию интерполяции Twig, но строковое выражение должно быть заключено в двойные кавычки и содержит встроенные кавычки, окружающие значения атрибута href.
Есть ли способ сделать это? Документы кажутся довольно легкими в этом отношении.
{{ " href="#{value1}#{value2)"" }}
Если вы хотите включить "
вам нужно сбежать от персонажа
{{ " href=\"#{value1}#{value2)\"" }}
Но это не очень хорошая идея
Лучший способ — включить ваше значение непосредственно в атрибут, например:
<a href="{{url}}">Some link</a>
И, конечно же, вы можете использовать конкатенацию
<a href="{{value1~value2}}">Some link</a>
Лучшие решения это:
href="{{value1}}{{value2}}"
При этом и значения1, и значения2 будут безопасно экранированы в отношении специальных символов HTML. И ваши двойные кавычки будут прямо поставлены.
Почему ваш метод плохая практика:
Что вы хотите сделать, это (эти два эквивалентны):
{{ " href=\"#{value1}#{value2}\"" }}
Или же
{{ ' href="'~value1~value2~'"' }}
Сделав это, он избежит двойных кавычек href и интегрирует их в конкатенацию.
Но поскольку конкатенация находится в {{…}} ветке, она также будет экранировать все результирующие двойные кавычки с автоэкспонированием HTML, они будут заменены на "
,
Вы можете отключить это автоэкранирование html так:
{{ 'href="'~value1~value2~'"' | raw}}
Но тогда это опасно, потому что value1 и value2 больше не будут экранированы html, и вы будете подвержены инъекциям XSS.