当前位置: 首页 > 编程笔记 >

JQuery Post转义提交HTML模板

景景胜
2023-03-14
本文向大家介绍JQuery Post转义提交HTML模板,包括了JQuery Post转义提交HTML模板的使用技巧和注意事项,需要的朋友参考一下

最近遇到这样一个问题,在表单中有一个textarea文本框,用来保存HTML模板。

因为是HTML模板,所以会有<html>、<script>等标签,但是这样无法通过AJAX Post方式保存。

经过实验,<script是导致无法提交的根源。找到原因,解决办法就简单了,就是把<转义成HTML实体&lt;。

最新说明:这个最后发现,是__POST被后台的PHP代码拦截了,所以不是客户端的问题,把PHP拦截代码去掉就可以了。

具体措施如下:

1 HTML表单

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>

再提交。

2 Post提交

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'
    );
});

这样是无法提交的。

3 转义函数

我们需要先对HTML符号进行转义,函数如下:

// 转义字符为HTML实体,相当于PHP的htmlspecialchars()函数
function html_encode(str)
{
    var s = "";
    if (str.length == 0) return "";
    s = str.replace(/&/g, "&amp;");
    s = s.replace(/</g, "&lt;");
    s = s.replace(/>/g, "&gt;");
    s = s.replace(/\"/g, "&quot;");
    return s;
}

// HTML实体转换为HTML标签,相当于PHP的htmlspecialchars_decode()函数
function html_decode(str)
{
    var s = "";
    if (str.length == 0) return "";
    s = str.replace(/&amp;/g, "&");
    s = s.replace(/&lt;/g, "<");
    s = s.replace(/&gt;/g, ">");
    s = s.replace(/&quot;/g, "\"");
    return s;
}

4 转义后再提交

修改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最令人讨厌的小特性。该按钮必