Сплошь и рядом требуется подставить значение из базы данных внутрь атрибутов HTML. Например, когда мы в интернет-магазине создаем уменьшенное изображение товара с помощью макроса Thumbnail и хотим прописать ему атрибут title, взяв его значение из поля с названием.
В контексте отрисовки дизайна товара обычно это делается примерно так:
$Thumbnail[source: $Attribute:pic1$; width: 250; height: 200; mode: bound; params: "title=\"$Attribute:title$\""]$
Данная конструкция сгенерирует HTML тэг вида <IMG SRC="..." title="тут тайтл из базы">. Обратите внимание, что кавычки, которые мы хотим передать в HTML тэг должны быть квотированы (предварены символом "обратный слэш") при написании внутри макроса. Делается это для того, чтобы избежать их интерпретацию макропроцессором Системы, чтобы он не спутал кавычки, ограничивающие параметры макроса Thumbnail с кавычками, которые являются частью значения ключа params. Более подробную информацию можно найти в описании макроса Thumbnail.
Все бы хорошо, но никто не гарантирует, что в базе данных в поле title конкретной записи не встретится символ "кавычка", что приведет к такому невалидному тэгу: <IMG SRC="..." title="тут "тайтл" из базы">.
Рекомендуемый способ для решения этой проблемы - воспользоваться макросом XMLize, который заменит все некорректные для языка XML конструкции. В результате обработки такого макроса:
$Thumbnail[source: $Attribute:pic1$; width: 250; height: 200; mode: bound; condition: $Attribute:pic1$!=; params: "title=\"$XMLize[$Attribute:title$]$\""]$
мы получим следующую конструкцию:
<IMG SRC="..." title="тут "тайтл" из базы">
Также, можно воспользоваться макросом Replace. Это немного более сложно настраиваемый, но зато более гибкий вариант, который позволяет с помощью регулярных выражений или обычного поиска и замены подставить вместо кавычек (в данном случае) любое другое значение, необходимое разработчику.