【问题标题】:php sprintf HTML templatephp sprintf HTML 模板
【发布时间】:2017-07-11 11:06:42
【问题描述】:

我有想要发送给我的用户的 html 邮件模板 通过 php mail() 函数。

我正在将此模板放入 php 变量中,并希望使用 sprintf() 函数将指定的变量插入到该变量中,但我得到了这个-

警告:sprintf():参数太少

在我的 html 模板中

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>template</title>
    <style type="text/css">
        @media screen and (max-width: 600px) {
            table[class="container"] {
                width: 95% !important;
            }
        }
        
        #outlook a {
            padding: 0;
        }
        
        body {
            width: 100% !important;
            -webkit-text-size-adjust: 100%;
            -ms-text-size-adjust: 100%;
            margin: 0;
            padding: 0;
        }
        
        .ExternalClass {
            width: 100%;
        }
        
        .ExternalClass,
        .ExternalClass p,
        .ExternalClass span,
        .ExternalClass font,
        .ExternalClass td,
        .ExternalClass div {
            line-height: 100%;
        }
        
        #backgroundTable {
            margin: 0;
            padding: 0;
            width: 100% !important;
            line-height: 100% !important;
        }
        
        img {
            outline: none;
            text-decoration: none;
            -ms-interpolation-mode: bicubic;
        }
        
        a img {
            border: none;
        }
        
        .image_fix {
            display: block;
        }
        
        p {
            margin: 1em 0;
        }
        
        h1,
        h2,
        h3,
        h4,
        h5,
        h6 {
            color: black !important;
        }
        
        h1 a,
        h2 a,
        h3 a,
        h4 a,
        h5 a,
        h6 a {
            color: blue !important;
        }
        
        h1 a:active,
        h2 a:active,
        h3 a:active,
        h4 a:active,
        h5 a:active,
        h6 a:active {
            color: red !important;
        }
        
        h1 a:visited,
        h2 a:visited,
        h3 a:visited,
        h4 a:visited,
        h5 a:visited,
        h6 a:visited {
            color: purple !important;
        }
        
        table td {
            border-collapse: collapse;
        }
        
        table {
            border-collapse: collapse;
            mso-table-lspace: 0pt;
            mso-table-rspace: 0pt;
        }
        
        a {
            color: #000;
        }
        
        @media only screen and (max-device-width: 480px) {
            a[href^="tel"],
            a[href^="sms"] {
                text-decoration: none;
                color: black;
                /* or whatever your want */
                pointer-events: none;
                cursor: default;
            }
            .mobile_link a[href^="tel"],
            .mobile_link a[href^="sms"] {
                text-decoration: default;
                color: orange !important;
                /* or whatever your want */
                pointer-events: auto;
                cursor: default;
            }
        }
        
        @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
            a[href^="tel"],
            a[href^="sms"] {
                text-decoration: none;
                color: blue;
                /* or whatever your want */
                pointer-events: none;
                cursor: default;
            }
            .mobile_link a[href^="tel"],
            .mobile_link a[href^="sms"] {
                text-decoration: default;
                color: orange !important;
                pointer-events: auto;
                cursor: default;
            }
        }
        
        @media only screen and (-webkit-min-device-pixel-ratio: 2) {
            /* Put your iPhone 4g styles in here */
        }
        
        @media only screen and (-webkit-device-pixel-ratio:.75) {
            /* Put CSS for low density (ldpi) Android layouts in here */
        }
        
        @media only screen and (-webkit-device-pixel-ratio:1) {
            /* Put CSS for medium density (mdpi) Android layouts in here */
        }
        
        @media only screen and (-webkit-device-pixel-ratio:1.5) {
            /* Put CSS for high density (hdpi) Android layouts in here */
        }
        /* end Android targeting */
        
        h2 {
            color: #181818;
            font-family: Helvetica, Arial, sans-serif;
            font-size: 22px;
            line-height: 22px;
            font-weight: normal;
        }
        
        a.link1 {}
        
        a.link2 {
            color: #fff;
            text-decoration: none;
            font-family: Helvetica, Arial, sans-serif;
            font-size: 16px;
            color: #fff;
            border-radius: 4px;
        }
        
        p {
            color: #555;
            font-family: Helvetica, Arial, sans-serif;
            font-size: 16px;
            line-height: 160%;
        }
    </style>

    <script type="colorScheme" class="swatch active">
        { "name":"Default", "bgBody":"ffffff", "link":"fff", "color":"555555", "bgItem":"ffffff", "title":"181818" }
    </script>

</head>

<body>
    <!-- Wrapper/Container Table: Use a wrapper table to control the width and the background color consistently of your email. Use this approach instead of setting attributes on the body tag. -->
    <table cellpadding="0" width="100%" cellspacing="0" border="0" id="backgroundTable" class='bgBody'>
        <tr>
            <td>
                <table cellpadding="0" width="620" class="container" align="center" cellspacing="0" border="0">
                    <tr>
                        <td>
                            <!-- Tables are the most common way to format your email consistently. Set your table widths inside cells and in most cases reset cellpadding, cellspacing, and border to zero. Use nested tables as a way to space effectively in your message. -->


                            <table cellpadding="0" cellspacing="0" border="0" align="center" width="600" class="container">
                                <tr>
                                    <td class='movableContentContainer bgItem'>

                                        <div class='movableContent'>
                                            <table cellpadding="0" cellspacing="0" border="0" align="center" width="600" class="container">
                                                <tr height="40">
                                                    <td width="200">&nbsp;</td>
                                                    <td width="200">&nbsp;</td>
                                                    <td width="200">&nbsp;</td>
                                                </tr>
                                                <tr>
                                                    <td width="200" valign="top">&nbsp;</td>
                                                    <td width="200" valign="top" align="center">
                                                        <div class="contentEditableContainer contentImageEditable">
                                                            <div class="contentEditable" align='center'>
                                                                <img src="images/logo.png" width="155" height="155" alt='Logo' data-default="placeholder" />
                                                            </div>
                                                        </div>
                                                    </td>
                                                    <td width="200" valign="top">&nbsp;</td>
                                                </tr>
                                                <tr height="25">
                                                    <td width="200">&nbsp;</td>
                                                    <td width="200">&nbsp;</td>
                                                    <td width="200">&nbsp;</td>
                                                </tr>
                                            </table>
                                        </div>

                                        <div class='movableContent'>
                                            <table cellpadding="0" cellspacing="0" border="0" align="center" width="600" class="container">
                                                <tr>
                                                    <td width="100%" colspan="3" align="center" style="padding-bottom:10px;padding-top:25px;">
                                                        <div class="contentEditableContainer contentTextEditable">
                                                            <div class="contentEditable" align='center'>
                                                                <h2></h2>
                                                            </div>
                                                        </div>
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td width="100">&nbsp;</td>
                                                    <td width="400" align="center">
                                                        <div class="contentEditableContainer contentTextEditable">
                                                            <div class="contentEditable" align='left'>
                                                                <p>Dear , %s
                                                                    <br/>
                                                                    <br/> 
                                                                    Thank you for being with us.<br/>
                                                                    This is your registration Information.<br/>
                                                                    login - <br/>
                                                                    Password - <br/>
                                                                    Click on the link below to sign-in your profile. If you're no longer interested in hearing from us, simply click on unsubscribe below (or ignore this message) and we won't send you any more newsletters.
                                                                </p>
                                                            </div>
                                                        </div>
                                                    </td>
                                                    <td width="100">&nbsp;</td>
                                                </tr>
                                            </table>
                                            <table cellpadding="0" cellspacing="0" border="0" align="center" width="600" class="container">
                                                <tr>
                                                    <td width="200">&nbsp;</td>
                                                    <td width="200" align="center" style="padding-top:25px;">
                                                        <table cellpadding="0" cellspacing="0" border="0" align="center" width="200" height="50">
                                                            <tr>
                                                                <td bgcolor="#ED006F" align="center" style="border-radius:4px;" width="200" height="50">
                                                                    <div class="contentEditableContainer contentTextEditable">
                                                                        <div class="contentEditable" align='center'>
                                                                            <a target='_blank' href="" class='link2'>Sign-In</a>
                                                                        </div>
                                                                    </div>
                                                                </td>
                                                            </tr>
                                                        </table>
                                                    </td>
                                                    <td width="200">&nbsp;</td>
                                                </tr>
                                            </table>
                                        </div>
                                        <div class='movableContent'>
                                            <table cellpadding="0" cellspacing="0" border="0" align="center" width="600" class="container">
                                                <tr>
                                                    <td width="100%" colspan="2" style="padding-top:65px;">
                                                        <hr style="height:1px;border:none;color:#333;background-color:#ddd;" />
                                                    </td>
                                                </tr>
                                                <tr>
                                                    <td width="60%" height="70" valign="middle" style="padding-bottom:20px;">
                                                        <div class="contentEditableContainer contentTextEditable">
                                                            <div class="contentEditable" align='left'>
                                                                <span style="font-size:13px;color:#181818;font-family:Helvetica, Arial, sans-serif;line-height:200%;">Sent to  by LinkedInterests.in</span>
                                                                <br/>
                                                                <span style="font-size:13px;color:#181818;font-family:Helvetica, Arial, sans-serif;line-height:200%;">
<!--											                    <a target='_blank' href="#" style="text-decoration:none;color:#555">Forward to a friend</a>-->
											                    </span>
                                                                <br/>
                                                                <span style="font-size:13px;color:#181818;font-family:Helvetica, Arial, sans-serif;line-height:200%;">
											                        <a href="#" style="text-decoration:none;color:#555">click here to unsubscribe</a>
                                                               </span>
                                                            </div>
                                                        </div>
                                                    </td>
                                                    <td width="40%" height="70" align="right" valign="top" align='right' style="padding-bottom:20px;">
                                                        <table width="100%" border="0" cellspacing="0" cellpadding="0" align='right'>
                                                            <tr>
                                                                <td width='57%'></td>
                                                                <td valign="top" width='34'>
                                                                    <div class="contentEditableContainer contentFacebookEditable" style='display:inline;'>
                                                                        <div class="contentEditable">
                                                                            <img src="" data-default="placeholder" data-max-width='30' data-customIcon="true" width='30' height='30' alt='facebook' style='margin-right:40x;'>
                                                                        </div>
                                                                    </div>
                                                                </td>
                                                                <td valign="top" width='34'>
                                                                    <div class="contentEditableContainer contentTwitterEditable" style='display:inline;'>
                                                                        <div class="contentEditable">
                                                                            <img src="" data-default="placeholder" data-max-width='30' data-customIcon="true" width='30' height='30' alt='twitter' style='margin-right:40x;'>
                                                                        </div>
                                                                    </div>
                                                                </td>
                                                                <td valign="top" width='34'>
                                                                    <div class="contentEditableContainer contentImageEditable" style='display:inline;'>
                                                                        <div class="contentEditable">
                                                                            <a target='_blank' href="#" data-default="placeholder" style="text-decoration:none;">
                                                                                <img src="" width="30" height="30" data-max-width="30" alt='pinterest' style='margin-right:40x;' />
                                                                            </a>
                                                                        </div>
                                                                    </div>
                                                                </td>
                                                            </tr>
                                                        </table>
                                                    </td>
                                                </tr>
                                            </table>
                                        </div>
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                </table>

            </td>
        </tr>
    </table>
    <!-- End of wrapper table -->
</body>

</html>

%s 只在第 260 行

还有我的 php 代码

$to = $validatedData['email'];
$name = $validatedData['name'];

$subject = 'Thank\'s for being with Us';

$message = file_get_contents(ROOT . '/views/newsletters/sign-up.php');
$message = sprintf($message, $name);

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

$headers[] = 'To: ' . $validatedData['name'] . '<' . $to . '>';
$headers[] = 'From: LinkedInterests Support <support@LinkedInterests.in>';                

mail($to, $subject, $message, implode("\r\n", $headers));

【问题讨论】:

    标签: php html file-get-contents asprintf


    【解决方案1】:
    $body = file_get_contents('email-template.html');
    $patterns = array(
            '/{name}/',
            '/{date}/',
            '/{company}/',
            '/{contact}/',
            '/{email}/',
        );
        $replacements = array(
            $post['name'],
            $post['date'],
            $post['company'],
            $post['contact'],
            $post['email'],
        );
    $body = preg_replace($patterns, $replacements, $body);
    

    而电子邮件模板应该是这样的

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Email</title>
    </head>
    
    <body>
            <p>
                <b>Hi {name},</b>
                <b>Your {date},</b>
                <b>Your {company},</b>
                <b>Your {contact},</b>
                <b>Your {email},</b>
            </p>
    </body>
    </html>
    

    【讨论】:

    • 你做了什么?请添加更改说明
    • 它将使用 preg_replace 替换 {} 之间的签名文本
    【解决方案2】:

    您应该转义 %,以便 printf 将它们视为文字(%s 除外)。可能是这样的:

    $message = sprintf(str_replace('%%s','%s, str_replace( '%', '%%', $message) ), $name);
    

    【讨论】:

      【解决方案3】:

      知道您会像在 sprintf 函数中使用模板一样使用它,请在任何有 '%' 符号的地方添加另一个 %。这个过程可能会很枯燥而且很耗时,所以有一个小替代方案:

      $message = sprintf(str_replace('%%s','%s',str_replace('%','%%',$message)), $name);
      

      【讨论】:

        【解决方案4】:

        也许 % 符号会造成误解。您可以尝试使用: $message=sprintf(addslashes($message),$name);

        【讨论】:

        猜你喜欢
        • 2023-03-13
        • 2012-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-23
        相关资源
        最近更新 更多