【问题标题】:Space and special characters problems on post帖子中的空格和特殊字符问题
【发布时间】:2015-05-06 17:28:15
【问题描述】:

我在使用此 AJAX 函数的 POST 操作期间遇到了空格和特殊字符问题:

function comments(id,postId,user_id) {
        var user_comments = encodeURIComponent($("#commentsId_"+id).val());
        if(user_comments!=''){
            var img = $("#img_"+id).val();
            var username = "<?php echo $this->session->userdata('username'); ?>"
            $.ajax({
                    type: "POST",
                    url: "<?php echo base_url() ?>social/userscomment/" +user_id+"/"+postId+"/"+user_comments,
                    data:{ user_comments : user_comments},
                    success: function(data) { 
                        $("#commentsId_"+id).val('');
                        var $sparkLines = $('.comments_body_'+id);
                        $("#comments_add_"+id).append('<div id="id' + ($sparkLines.length + 1) + '" class="comments_body_"'+id+'><div class="feed-element comments_body_"'+id+'><a class="pull-left"><strong>'+username+' <i class="fa fa-comment-o"></i></strong></a><div class="media-body">'+user_comments+'<br></div><div class="col-lg-12"><a id="span_'+postId+'" onclick="callajaxcommcool('+postId+')" class="btn btn-xs btn-white"><i class="fa fa-star"></i><span id="span1_'+postId+'" style="display:none;">1</span> Cool </a></div></div></div></div>');
                    }
            });
        }
    }

PHP 控制器:

public function userscomment($comment_id,$post_id,$user_comments){

    $this->load->model('comments');

    $user_comments = utf8_decode(trim(mysql_real_escape_string($_POST['user_comments'])));

    if(!empty($user_comments)){

        $data = array("user_id"         => $this->session->userdata('user_id'),
                      "comment_user_id" => $comment_id,
                      "comments"        => $user_comments,
                      "post_id"         => $post_id,
                      "username"        => $this->session->userdata('username')
                );
        $this->comments->insertComments($data);

        //logged user
       $userRow = $this->register->get_login($this->session->userdata('user_id'));
       redirect('social/userprofile/'.$userRow[0]['username']);
    }
}    

当用户发表类似“abcd”的评论时,视图中显示的结果是:a%20b%20c%20d,如果用户尝试写像 € 这样的特殊字符,我得到的结果是 %E2%82%交流

我怎样才能避免这个问题?

编辑:

解决了AJAX成功函数中的问题,我错过了

'+decodeURIComponent(user_cmets)+'

success: function(data) { 
    $("#commentsId_"+id).val('');
    var $sparkLines = $('.comments_body_'+id);
    $("#comments_add_"+id).append('<div id="id' + ($sparkLines.length + 1) + '" class="comments_body_"'+id+'><div class="feed-element comments_body_"'+id+'><a class="pull-left"><strong>'+username+' <i class="fa fa-comment-o"></i></strong></a><div class="media-body">'+decodeURIComponent(user_comments)+'<br></div><div class="col-lg-12"><a id="span_'+postId+'" onclick="callajaxcommcool('+postId+')" class="btn btn-xs btn-white"><i class="fa fa-star"></i><span id="span1_'+postId+'" style="display:none;">1</span> Cool </a></div></div></div></div>');}

Edit2:我已经执行了代码,因为 encodeURIComponent 不允许这个字符 ~!*()'" ,我已经使用替换功能来绕过这个限制,希望能有所帮助。

function subcomments(id,postId,user_id) {
        var user_comments = encodeURIComponent($("#commentsId_"+id).val()).replace(/\-/g, "%2D").replace(/\_/g, "%5F").replace(/\./g, "%2E").replace(/\!/g, "%21").replace(/\~/g, "%7E").replace(/\*/g, "%2A").replace(/\'/g, "%27").replace(/\(/g, "%28").replace(/\)/g, "%29");
        if(user_comments!=''){
            var img = $("#img_"+id).val();
            var username = "<?php echo $this->session->userdata('username'); ?>"
            $.ajax({
                    type: "POST",
                    url: "<?php echo base_url() ?>social/userscommentcool/" +user_id+"/"+postId+"/"+user_comments,
                    data:{ user_comments : user_comments },
                    success: function(data) { 
                        $("#commentsId_"+id).val('');
                        var $sparkLines = $('.comments_body_'+id);
                        $("#comments_add_"+id).append('<div id="id' + ($sparkLines.length + 1) + '" class="comments_body_"'+id+'><div class="feed-element comments_body_"'+id+'><a class="pull-left"><strong>'+username+' <i class="fa fa-comment-o"></i></strong></a><div class="media-body">'+decodeURIComponent(user_comments)+'<br></div><div class="col-lg-12"><a id="span_'+postId+'" onclick="callajaxcommcool('+postId+')" class="btn btn-xs btn-white"><i class="fa fa-star"></i><span id="span1_'+postId+'" style="display:none;">1</span> Cool </a></div></div></div></div>');
                    }
            });
        }
    }

【问题讨论】:

  • 你是如何获得 user_cmets 的?你在做 $_POST['user_cmets'] 吗?

标签: php jquery ajax codeigniter


【解决方案1】:

在对象中传递参数时不要使用encodeURIComponent。仅当您自己构建 URL 编码的字符串时才需要它。 jQuery 自动对对象中的参数进行编码,结果是它被编码了两次。所以就这样做吧:

var user_comments = $("#commentsId_"+id).val();

【讨论】:

    【解决方案2】:

    您应该使用 javascript decodeURI("a%20b%20c%20d") 在您的视图中再次将其转换为“a b c d”。

    使用php:

    在您看来,在您放置编码值的那一行中,只需使用它:

    echo urldecode("your_encoded_value");
    

    【讨论】:

    • 我刚刚更新了上面的代码。我以为您正在使用 javscript 在屏幕上打印,但您没有。我现在想你正在使用 CodeIgniter。所以试试上面的php更新代码,在这里写下反馈。希望对您有所帮助。
    • 是的,我正在使用 CodeIgniter、jQuery 和 AJAX。我试过了,但没有成功
    • 请粘贴用于在屏幕上打印用户帖子的代码块
    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2011-04-19
    相关资源
    最近更新 更多