JavaScript clone hidden field 難字處理

  • 1541
  • 0

摘要:JavaScript clone hidden field 難字處理

遇到難字處理的問題:使用者輸入的難字,有時候會被轉換成 NCR(Numeric Character Reference)格式送出,像這個 http://blog.darkthread.net/post-2007-01-29-1-1.aspx

"&#"會被 .net validateRequest擋掉,直接拋錯…試了一些辦法,記錄一下最後的解法。

前端 js:

$(".NCRcheck").bind("input", function () {
    var $this = $(this),
        $next = $this.next(),
        $hidden = $next.hasClass("NCRclone") ? $next : $("<input class="NCRclone" type="hidden" />").insertAfter($this);
    if ($this.attr("name")) {
        $hidden.attr("name", $this.attr("name"));
        $this.removeAttr("name");
    }
    $hidden.val(encodeURIComponent($this.val()));
});

產生 hidden欄位對應 input欄位,並將使用者輸入的值編碼後存入 hidden,實際 submit時是傳送 hidden field。

後端 cs:

public static class StringExtension
{
    public static string CustomDecode(this string input)
    {
        string urlDecode = HttpUtility.UrlDecode(input);
        if (Regex.IsMatch(urlDecode, "&#", RegexOptions.Singleline))
        {
            return HttpUtility.HtmlDecode(urlDecode);
        }

        return urlDecode;
    }
}

NCR要解兩次,一般只要解一次。

然後要開放的輸入欄位前後端都要手動調整一次…暫時還沒想到更好的辦法。