我有这个问题: 我有一个带有textarea字段的表单,在onSumbit上,我将带有表格的div的内容复制到此textarea字段。
当我发送此表单并在IE中发送包含这些值的电子邮件时,我得到的格式文本未格式化。我已经测试过Chrome,Firefox,Opera,Safari和我的格式化表格。只有IE无法使用。
我的表单以:
开头<form name="form" action="sendmail.php" method="post" onsubmit="formVal()" >
$("#value2").html($("#spReport").html());
并在php脚本中获取值:
$message = "
<p><b>Summary: </b><br />" . $_POST['value2'] . " .</p>";
然后我通过电子邮件发送。
使用Chrome,Firefox,Safari,Opera正常工作,我收到表格式的电子邮件。只有IE给了我这个问题。我已经在IE下使用Developer Tools进行了检查,并且textarea value2的值填充了格式化的表格(带有html标签)。
任何想法可能出错?
答案 0 :(得分:1)
如何设置textarea的值也可能对此产生影响。您应该通过以下方式设置值:
$("#value2").val( $("#spReport").html() );
使用.html()(甚至.text())应该只应用于标记,特别是。 .val()主要用于设置表单字段变量。当然,它们是可以互换的,但你不知道可能会发生什么副作用。
答案 1 :(得分:1)
我几乎可以肯定Internet Explorer会自动转义html,因为您将其作为文本框的一部分提交。我真的很惊讶其他浏览器也没有为你做这些 - 标准与否,这是防止XSS攻击的好方法。
在发送电子邮件之前,应该“解决”问题的方法是在php中的字段上调用htmlspecialchars_decode()。 (对于没有自动转义的浏览器,这不会做任何事情,并且应该修复IE所做的转义。)
那就是说,我可以建议不依赖客户端发送的HTML吗?一个更好的解决方案是在PHP中生成表并避免从客户端接受HTML,这只是要求注入。至少,确保在通过电子邮件发送之前清理你的html。