首页 > 解决方案 > HTML/HP:Emogrifier 将 {} 变成 %7B 和 %7D

问题描述

我目前正在设置一个电子邮件模板,它有两部分:HTML 和 CSS。要将所有内容放在一起并将 HTML 与 CSS 合并,我正在使用 PHP Emogrifier。

现在我发现当我对这两个元素进行表情化时,uft-8 编码存在问题。

Ä、Ü、Ö 之类的所有作品都可以正确显示,但是当我在这里将这样的链接放入内容中时,utf-8 解码不适用于此元素:

表情化之前:

<a href="{password_reset_link}" id="button">Passwort zurücksetzten</a>

表情化后:

<a href="%7Bpassword_reset_link%7D" id="button" style="color: #69f0ae; text-decoration: none; font-size: 20px; text-align: center; display: block; line-height: 1.7em !important; padding: .3em 1em;
> border: 2px solid #69f0ae; border-radius: 3px; -webkit-border-radius:
> 3px; -moz-border-radius: 3px; width: 40%; margin: auto; cursor:
> pointer !important;">Passwort zurücksetzten</a>

如您所见,href 已损坏,它使用占位符设置,在 emogrify 过程后被正确的链接替换:

%7Bpassword_reset_link%7D

这就是我对内容进行表情化的方式:

//Apply CSS styles inline for picky email clients.
try {
    $emogrifier = new Emogrifier( $message, $css );
    $message    = $emogrifier->emogrify();
} catch ( Exception $e ) {
    $logger = wc_get_logger();
    $logger->error( $e->getMessage(), array( 'source' => 'emogrifier' ) )
}

和包括内容和风格$message$css当我在没有 emogrify 的情况下执行此操作时,链接会成功替换。那么有人知道我该如何解决这个问题吗?

标签: phphtmlcss

解决方案


这似乎是一个错误。当您查看 Emogrifier 的 Github 时,您会发现还有一些带有其他符号的错误,例如美元符号$。我现在用这个解决方法暂时修复了它,但这个错误需要在 Emogrifier 本身上得到修复。

解决方法(希望对某人有所帮助):

//Apply CSS styles inline for picky email clients.
try {
    $emogrifier = new Emogrifier( $message, $css );
    $message    = $emogrifier->emogrify();
} catch ( Exception $e ) {
    $logger = wc_get_logger();
    $logger->error( $e->getMessage(), array( 'source' => 'emogrifier' ) );
}

$message = str_replace( array( '%7B', '%7D' ), array( '{', '}' ), $message );

推荐阅读