#html #parsing #email
#HTML #синтаксический анализ #Адрес электронной почты
Вопрос:
Сначала немного справочной информации. Я создаю электронные письма в формате HTML на своем рабочем месте, и весь процесс очень утомителен. Это немного похоже на это…
- Разметка кода для HTML с использованием таблиц и некоторых элементов CSS
- Разбирайте HTML и CSS с помощью Premailer, чтобы весь CSS был встроенным
- Тестовый HTML работает во всех почтовых клиентах
- Создайте копию встроенной версии HTML и начните добавлять собственные переменные в инструмент электронной почты, используемый для отправки электронных писем, т.Е.
<%=constant.first_name%>
,<%=unsubscribe_link%>
- Протестируйте в почтовом клиенте, чтобы увидеть, работает ли это и доволен ли клиент. Если нет, повторите шаги с 1 по 5 снова.
Итак, как вы можете видеть, через некоторое время это становится действительно утомительным.
Что я хотел бы сделать, так это создать скрипт командной строки, подобный Premailer, который позволяет мне анализировать HTML-файл с сохраненными в нем переменными, не уничтожая текст примера, уже имеющийся в HTML. Таким образом, при предварительном просмотре HTML все выглядит превосходно.
Например…
Сохраните функцию first name как переменную для собственного использования.
$first_name = "<%=constant.first_name%>
Затем сообщите анализатору, какое слово (ы) заменить соответствующей переменной.
<p>My name is <!-- $first_name -->Gavin<!-- /$first_name --></p>
Так что конечный результат выглядит примерно так:
<p>My name is <%=constat.first_name%></p>
Возможно ли такое? Есть ли лучший синтаксис, который я мог бы использовать, например, пользовательский тег <first_name>Gavin</first_name>
, если браузер может с этим справиться.
Любой совет полезен. 🙂
Ответ №1:
Я видел, как это делалось раньше, используя синтаксис типа:
{assign_variable:first_name="Jesse"}
Тогда вы могли бы использовать его как:
{first_name}
Способ, которым вы бы проанализировали это (при условии, что вы используете PHP), был бы примерно таким:
<?php
// Our Template Code
$strHTML = <<<EOT
{assign_variable:first_name="Jesse"}
{assign_variable:last_name="Bunch"}
Hello, {first_name}!
EOT;
// Get all the variables
$arrMatches = array();
preg_match_all('/{assign_variable:([a-zA-Z_-]*)="([a-zA-Z0-9] )"}/', $strHTML, $arrMatches);
// Remove the assign_variable tags
$strHTML = preg_replace('/{assign_variable:([a-zA-Z_-]*)="([a-zA-Z0-9] )"}/', '', $strHTML);
// Combine them into key/values
$arrVariables = array_combine($arrMatches[1], $arrMatches[2]);
foreach($arrVariables as $key=>$value) {
// Replace the variable occurrences
$strHTML = str_replace('{' . $key . '}', $value, $strHTML);
}
// Send the parsed template
echo $strHTML;
Какие результаты:
Hello, Jesse!
Обратите внимание, это очень простой пример. Вот некоторые улучшения, которые необходимо внести в этот код перед использованием его в рабочей среде:
- Отредактируйте регулярное выражение, чтобы разрешить использование правильных символов.
- Возможно, реализовать лучший метод замены, чем цикл
- Проверьте, нет ли ошибок синтаксического анализа
- Тест производительности
В целом, я думаю, вы поняли идею. Надеюсь, это укажет вам правильное направление.
Комментарии:
1. Привет, Джесси, это, безусловно, то, о чем я никогда раньше не задумывался. Меня беспокоит только то, что мне нужно иметь возможность сохранить HTML, который я могу скопировать и вставить в инструмент электронной почты для отправки электронного письма. Что заставляет меня думать, что я, возможно, не смогу достичь этого в PHP : (. Бит, который мне нужно добавить в инструмент электронной почты, это <p> Привет, <%first_name%></p> вместо <p> Привет, Джесси</ p>. Но при разработке html мне нужно иметь возможность видеть «Привет, Джесси», а не «Привет, <%first_name%>». Я надеюсь, что это делает его более понятным. Еще раз спасибо.
2. Еще раз просмотрев ваш ответ, я понял, что могу просто скопировать выведенный html из браузера. Спасибо.
Ответ №2:
У меня похожая ситуация
Я создал «шаблон формата», подобный этому:
<?php // section1 $var1/$var2 ?>
<head>
<title>$var1</title>
<meta name="description" content="$var2">
</head>
<?php // section2 $var1/$var2 ?>
<body>
hello: <p>$var1</p>
news for you: <p>$var2</p>
</body>
это действительный php-код и действительный html-код, поэтому вы можете редактировать его с помощью dreamwaver или аналогичного, и вы также можете разместить его.
затем php-скрипт заменяет все значения переменных во всех разделах.
Комментарии:
1. Привет, Луис, спасибо за предложение. Кажется достаточно простым, единственная проблема в том, что мне нужно решение, которое просматривает правильный текст, в котором указаны переменные. Например, вместо того, чтобы видеть «hello: $ var1» при предварительном просмотре в браузере, вы увидите «hello: Luis», но при анализе он будет сохранен как «<p> hello: <%=weird_email_client_tags_here%></p>. Объяснить это сложнее, чем я думал, я надеюсь, что это имеет смысл.
2. итак, примите или разработайте шаблон и создайте скрипт с шаблоном в качестве входных и двумя выходными файлами, которые вам нужны. ваш шаблон, как и предлагалось, должен быть совместим с «редакторами» и легко трансформироваться в желаемый результат. если вам нужна помощь с настройками, используйте @Jesse Bunch хороший подход или другой, или спросите еще раз, но это должен быть отдельный скрипт
3. Вы правы, я не уверен, почему я пытался усложнить себе жизнь. Я мог бы просто иметь 2 набора переменных и переключать их при необходимости.