ในการพัฒนาโปรแกรมไม่ว่าจะพัฒนาด้วยภาษาใดก็ตาม ทุกภาษาจะมี special characters ซึ่ง special characters บางตัวอาจจะถูกระบุให้เป็นตัวแปร หรือ ใช้อักขระพิเศษเพื่อระบุอยู่ลำดับสุดท้ายของข้อความของบรรทัด เป็นต้น ซึ่งตรงส่วนนี้จะทำให้ประสบปัญหาในการนำ special characters ไปใช้งาน นั่นคือจะทำให้เกิด Error ทำให้โปรแกรมไม่สามารถทำงานต่อได้ ซึ่งJavaScript ก็เป็นอีกหนึ่งภาษาที่ประสบปัญหานี้ เช่น การส่ง parameter ผ่าน function ของ JavaScript โดยค่าของ parameter ที่ส่งไปเป็น special characters ทำให้เกิด Error และโปรแกรมไม่สามารถทำงานต่อได้
วันนี้จะขอแนะนำเทคนิคในการแก้ปัญหาดังกล่าว นั่นก็คือ การ Encoding และ Decoding ในที่นี้ผู้เขียนได้พัฒนาในรูปแบบ MVC โดยใช้ JavaScript ในการเรียก Controller จึงใช้วิธีการ Encoding กับ JavaScript และ ทางฝั่ง Controller จะใช้ C# จึงใช้ C# ในการ Decoding ค่ะ
1.วิธีการ Encoding in JavaScript ในการจะส่ง parameter ผ่านทาง function ของ JavaScript โดยข้อความนั้นมี special characters จำเป็นที่จะต้องมีการ Encoding ในที่นี้เราจะใช้ฟังก์ชัน Escape() ของ JavaScript
ตัวอย่าง Encoding in JavaScript
<script> function SaveData() { var txtDocTitle = $('#txtDocTitle').val(); $('#pleaseWaitDialog').modal(); $.ajax({ type: 'POST', contentType: 'application/json; charset=utf-8', url: "@Url.Action("SaveDataToTable", "I_EXPENSE")", data: "{'budgetYear':'" + valueYear + "' ,'docTitle':'" + escape(txtDocTitle) + "'}", success: function (data) { }, error: function (data) { alert(data); } }); } </script>
จากตัวอย่างกรณีป้อนข้อมูลที่มี special characters เช่น “I’m *&^$ special characters” เมื่อใช้ function escape(“I’m *&^$ special characters”) จะได้ผลลัพธ์ดังนี้
ผลลัพธ์จากการเรียกใช้ escape()
I%u2019m%20*%26%5E%24%20special%20characters
หลังจากที่มีการเรียกใช้ escape() จะทำให้สามารถส่ง parameter ที่มี special characters ไปได้โดยไม่พบ Error โปรแกรมสามารถทำงานได้ปกติ เป็นอันผ่านไปหนึ่งด่านในส่วนของการเรียกใช้งาน function ของ JavaScript แต่ทว่าการที่เราจะนำข้อความที่ผ่านการ Encoding มาใช้งานไม่ได้ เนื่องจากจะไม่ถูกต้องตามความต้องการของผู้ใช้งาน จากตัวอย่างข้างต้น ผู้ใช้งานป้อนข้อมูล “I’m *&^$ special characters” สิ่งที่โปรแกรมต้องทำการบันทึกก็ต้องเป็น “I’m *&^$ special characters” ไม่ใช่ “I%u2019m%20*%26%5E%24%20special%20characters” ดังนั้นจึงจำเป็นจะต้องมีการ Decoding เพื่อให้ได้ข้อมูลที่ถูกต้อง
2.Decoding in C# เมื่อมีการ Encoding เราจำเป็นที่จะต้อง Decoding เพื่อให้ได้ข้อมูลที่ถูกต้องตามที่ผู้ใช้งานได้ป้อนข้อมูล
ตัวอย่าง Decoding in C#
var docTitle = HttpUtility.UrlDecode(docTitle, System.Text.Encoding.Default);
//ตรงส่วนนี้ตัวแปร docTitle จะมีค่าเท่ากับ “I’m *&^$ special characters” ค่ะ
เมื่อ Decoding แล้ว ก็จะได้ข้อความที่ถูกต้องตามที่ผู้ใช้งานได้ป้อนข้อมูลและสามารถนำไปใช้งานได้อย่างถูกต้องแล้วนะคะ
สำหรับบทความนี้ก็ขอจบเพียงเท่านี้และหวังว่าผู้พัฒนาคงหมดกังวลในส่วนของ Special character ที่ส่งค่า parameter ผ่านทาง JavaScript ได้อย่างไม่มี error มากวนใจผู้พัฒนากันอีกแล้วนะคะ ^_^
แหล่งอ้างอิง :
https://developer.mozilla.org/th/docs/Web/JavaScript/Reference/Global_Objects/escape
http://stackoverflow.com/questions/3778165/unescape-javascripts-escape-using-c-sharp