最近遇到这样一个问题,在表单中有一个textarea文本框,用来保存HTML模板。
因为是HTML模板,所以会有<html>、<script>等标签,但是这样无法通过AJAX Post方式保存。
经过实验,<script是导致无法提交的根源。找到原因,解决办法就简单了,就是把<转义成HTML实体<。
最新说明:这个最后发现,是__POST被后台的PHP代码拦截了,所以不是客户端的问题,把PHP拦截代码去掉就可以了。
具体措施如下:
Form表单如下:
<form action="save.php" method="post"> <textarea name="source"></textarea> <button type="submit">提交</button> </form>
然后,在文本框中输入如下内容,
<!DOCTYPE html> <html> <head> <title>演示</title> <script type="text/javascript"> alert("弹出框"); </script> </head> <body> <div>演示</div> </body> </html>
再提交。
JQuery Post提交代码如下:
$("form[method='post']").on('submit', function (e) { e.preventDefault(); var form = $(this); $.post( form.attr("action"), form.serialize(), function (result) { $('.alert').html(result.msg).show().delay(1500).fadeOut(); if (result.success) { setTimeout(function () { window.location.href = "index.php"; }, 1000); } else { return false; } }, 'json' ); });
这样是无法提交的。
我们需要先对HTML符号进行转义,函数如下:
// 转义字符为HTML实体,相当于PHP的htmlspecialchars()函数 function html_encode(str) { var s = ""; if (str.length == 0) return ""; s = str.replace(/&/g, "&"); s = s.replace(/</g, "<"); s = s.replace(/>/g, ">"); s = s.replace(/\"/g, """); return s; } // HTML实体转换为HTML标签,相当于PHP的htmlspecialchars_decode()函数 function html_decode(str) { var s = ""; if (str.length == 0) return ""; s = str.replace(/&/g, "&"); s = s.replace(/</g, "<"); s = s.replace(/>/g, ">"); s = s.replace(/"/g, "\""); return s; }
修改HTML代码,把textarea的name属性改成另外一个名称,如source改成html_source,
<form action="save.php" method="post"> <textarea name="html_source"></textarea> <button type="submit">提交</button> </form>
然后就可以在post之前转义textarea内容,再提交source就可以了,如下:
$("form[method='post']").on('submit', function(e){ e.preventDefault(); var form = $(this); var html_source = encodeURIComponent(html_encode(form.find('textarea[name=html_source]').val())); form.find('textarea[name=html_source]').prop('disabled', true); $.post( form.attr("action"), form.serialize() + '&source=' + html_source, function (result) { $('.alert').html(result.msg).show().delay(1500).fadeOut(); if(result.success) { setTimeout(function(){ window.location.href = "index.php"; }, 1000); } else { form.find('textarea[name=html_source]').prop('disabled', false); return false; } }, 'json' ); });
这样就可以顺利提交了,下次PHP显示时,用 htmlspecialchars_decode() 函数解码就可以正常显示。
问题内容: 想知道是否有一种简单的方法可以在Objective C中执行简单的HTML转义/转义。我想要的是这样的伪代码: 哪个返回 希望也转义所有其他HTML实体,甚至ASCII码(例如Ӓ等)。 Cocoa Touch / UIKit中有什么方法可以做到这一点? 问题答案: 包含以下解决方案。可可CF具有CFXMLCreateStringByUnescapingEntities函数,但在iPho
问题内容: 目前,我过去通常在字符串中转义不需要的HTML标记,但是后来我意识到它也可以转义带有重音的字符,这是我不想要的。 您是否知道任何用于转义HTML标记的解决方案,但请保留我的特殊字母(对某些人来说,这是正常的;])。 提前致谢! 巴拉斯 问题答案:
请不要只提交需求而不创建问题。 What is the purpose of the change XXXXX Brief changelog XX Verifying this change XXXX Follow this checklist to help us incorporate your contribution quickly and easily: [ ] Make sure t
"Pay attention to what you hear; the measure you give will be the measure you get, and still more will be given you. For to those who have, more will be given; and from those who have nothing, even wh
您可以在显示结果时转义HTML标记。 语法 (Syntax) export default Ember.Helper.helper(function(params) { //code here } 例子 (Example) 下面给出的示例将转义HTML标记。 创建一个新的帮助程序eschtmlcontent并将以下代码添加到其中 - import Ember from 'ember'; e
问题内容: 我有一个表格。在该表格之外,我有一个按钮。一个简单的按钮,如下所示: 但是,当我单击它时,它会提交表单。这是代码: 该按钮应该做的就是编写一些JavaScript。但是,即使看起来像上面的代码一样,它也会提交表单。当我将标签按钮更改为跨度时,它可以完美工作。但不幸的是,它必须是一个按钮。有什么办法可以阻止该按钮提交表单?像例如 问题答案: 我认为这是HTML最令人讨厌的小特性。该按钮必