摘要: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要解兩次,一般只要解一次。
然後要開放的輸入欄位前後端都要手動調整一次…暫時還沒想到更好的辦法。