<div id="email_content">
<iframe srcdoc="{$email_content}"></iframe>
</div>
如下图所示,我在div#email_content
内使用iframe来显示电子邮件内容的准确预览。我正在尝试使用srcdoc
属性在iframe中加载电子邮件内容。这里的电子邮件内容可能是通过CkEditor设计的纯文本或HTML内容。我尝试使用escape,htmlentities等。但是srcdoc属性会中断,因为属性值包含纯HTML代码和引号。
任何解决方法都将被接受。
谢谢!
注意:我不想在此处使用src
属性。
答案 0 :(得分:6)
根据HTML5 specification for <iframe>
,我们需要使用HTML实体替换 srcdoc 字符串中的引号和&符号: / p>
在HTML语法中,作者只需要记住使用“”(U + 0022)字符来包装属性内容,然后转义所有“”“(U + 0022)和U + 0026 AMPERSAND(&amp;)字符,并指定沙盒属性,以确保安全嵌入内容。
注意必须转义引号的方式(否则srcdoc属性会过早结束),并且沙盒内容中提到的原始&符号(例如在URL或散文中)的方式必须 加倍 转义 - 一次以便在最初解析srcdoc属性时保留&符号,并在解析沙盒内容时再次防止&符号被错误解释。
我们可以使用str_replace()
:
$srcdoc = '<div id="foo">"Contains quoted text."</div>';
$escaped = str_replace([ '"', '&' ], [ '"', '&amp;' ], $srcdoc);
上面显示的&符号替换不是拼写错误。此代码生成:
<div id="foo">"Contains quoted text."</div>
然后,我们可以使用srcdoc
属性值的转义值:
<div id="email_content">
<iframe sandbox srcdoc="<div id="foo">"Contains quoted text."</div>"></iframe>
</div>
请注意,Internet Explorer或Edge中的HTML5 srcdoc为not yet available。电子邮件客户端的支持将更低。
答案 1 :(得分:3)
你需要在php中使用htmlentities
方法
<?php
$str = '<a href="https://www.tarunlalwani.com">Go to tarunlalwani.com</a>';
echo htmlentities($str);
?>
然后将其分配给srcdoc
。它的工作方式如下面的JSFiddle