html textarea html标签仅在IE中发送表单后丢失

时间:2011-11-07 16:04:29

标签: php jquery html forms

我有这个问题: 我有一个带有textarea字段的表单,在onSumbit上,我将带有表格的div的内容复制到此textarea字段。

当我发送此表单并在IE中发送包含这些值的电子邮件时,我得到的格式文本未格式化。我已经测试过Chrome,Firefox,Opera,Safari和我的格式化表格。只有IE无法使用。

我的表单以:

开头
<form name="form" action="sendmail.php" method="post" onsubmit="formVal()" >
on on onSubmit我用这个设置文本区域值:

$("#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标签)。

任何想法可能出错?

2 个答案:

答案 0 :(得分:1)

如何设置textarea的值也可能对此产生影响。您应该通过以下方式设置值:

$("#value2").val( $("#spReport").html() );

使用.html()(甚至.text())应该只应用于标记,特别是。 .val()主要用于设置表单字段变量。当然,它们是可以互换的,但你不知道可能会发生什么副作用。

答案 1 :(得分:1)

我几乎可以肯定Internet Explorer会自动转义html,因为您将其作为文本框的一部分提交。我真的很惊讶其他浏览器也没有为你做这些 - 标准与否,这是防止XSS攻击的好方法。

在发送电子邮件之前,应该“解决”问题的方法是在php中的字段上调用htmlspecialchars_decode()。 (对于没有自动转义的浏览器,这不会做任何事情,并且应该修复IE所做的转义。)

那就是说,我可以建议依赖客户端发送的HTML吗?一个更好的解决方案是在PHP中生成表并避免从客户端接受HTML,这只是要求注入。至少,确保在通过电子邮件发送之前清理你的html。