如何解析HTML文件中的占位符文本,然后将其替换为自定义标记?

如何解析HTML文件中的占位符文本,然后将其替换为自定义标记?,html,parsing,email,Html,Parsing,Email,首先是一些背景信息。我在工作场所创建HTML电子邮件,整个过程非常繁琐。事情有点像这样 使用表和一些CSS为HTML编写代码标记 使用解析HTML和CSS,以便所有CSS都是内联的 测试HTML适用于所有电子邮件客户端 创建HTML内联版本的副本,并开始向用于发送电子邮件的电子邮件工具添加专有变量,即, 在电子邮件客户端中进行测试,看看它是否有效,客户端是否满意。如果没有,请再次重复步骤1至5 所以,正如你所看到的,过了一段时间,它变得非常乏味 我想做的是创建一个类似于Premailer的命令行

首先是一些背景信息。我在工作场所创建HTML电子邮件,整个过程非常繁琐。事情有点像这样

  • 使用表和一些CSS为HTML编写代码标记
  • 使用解析HTML和CSS,以便所有CSS都是内联的
  • 测试HTML适用于所有电子邮件客户端
  • 创建HTML内联版本的副本,并开始向用于发送电子邮件的电子邮件工具添加专有变量,即
  • 在电子邮件客户端中进行测试,看看它是否有效,客户端是否满意。如果没有,请再次重复步骤1至5
  • 所以,正如你所看到的,过了一段时间,它变得非常乏味

    我想做的是创建一个类似于Premailer的命令行脚本,它允许我使用存储在其中的变量解析HTML文件,而不破坏HTML中已有的示例文本。这样,当您预览HTML时,它看起来非常漂亮

    例如

    将first name函数存储为变量供自己使用

    $first_name = "<%=constant.first_name%>
    
    $first\u name=”
    
    然后告诉解析器要用适当的变量替换哪个词

    <p>My name is <!-- $first_name -->Gavin<!-- /$first_name --></p>
    
    我的名字叫加文

    因此,最终输出类似于:

    <p>My name is <%=constat.first_name%></p>
    
    <?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;
    
    我的名字是

    这样的事情可能吗?如果浏览器可以处理的话,有没有更好的语法,像
    Gavin
    这样的自定义标记


    任何建议都是有帮助的。:

    在使用以下语法之前,我见过这样做:

    {assign_variable:first_name="Jesse"}
    
    然后,你可以像这样使用它:

    {first_name}
    
    如果您使用的是PHP,那么您解析它的方式如下:

    <p>My name is <%=constat.first_name%></p>
    
    <?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;
    
    注意,这是一个非常基本的示例。在将此代码用于生产之前,需要对其进行一些改进:

    • 编辑正则表达式以允许使用正确的字符
    • 可能实现比循环更好的替换方法
    • 检查分析错误
    • 基准业绩

    总而言之,我想你明白了。希望这能为你指明正确的方向。

    我也有类似的情况
    我创建了一个“格式模板”,如下所示:

    <?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>
    
    
    $var1
    您好:$var1

    给你的消息:$var2

    它是有效的php代码和有效的html代码,因此您可以使用dreamwaver或类似工具进行编辑,也可以托管它。

    然后,一个php脚本将替换所有部分中的所有变量。

    Hi Luis,谢谢你的建议。看起来很简单,唯一的问题是我正在寻找一个可以预览变量所在位置的正确文本的解决方案。例如,当你在浏览器中预览时,你会看到hello:Luis,而不是看到“hello:$var1”,但是,当解析时,它将被保存为“你好:

    。它比我想解释的要复杂,我希望这是有意义的。因此,采用或设计一个模板,并创建一个脚本,模板作为输入和两个输出文件,你需要。你的模板建议,应该与“编辑器”兼容“并且易于转换为您所需的输出。若你们需要关于替代的帮助,请使用@Jesse Bunch nice aproach或其他,或者再次询问,但这应该是一个单独的脚本你们是对的,我不知道为什么我要让我的生活更困难。我可以有两组变量,并在需要时切换它们。嗨,杰西,这肯定是我以前从未考虑过的事情。我唯一关心的是,我需要能够保存HTML,我可以复制和粘贴到电子邮件工具发送电子邮件。这让我觉得我可能无法在PHP中实现这一点:(.我需要添加到电子邮件工具的位是你好,

    作为你好,Jesse

    。但是在开发html时,我需要能够看到“你好,Jesse”而不是“你好,”。我希望这能让它更清楚。再次感谢。再次查看您的答案后,我意识到我可以从浏览器复制输出的html。谢谢。