Send the inputs from the "Form" of html page to .aspx file (change the encoding - using escape)
בתקופה האחרונה אני מרגיש שחזרתי לימי הבניים,
אני עובד על פרויקט web, אבל אני יכול להשתמש רק ב html ו js, מותר לי לכתוב aspx רק לשימוש כמו webService (כדי לשמור נתונים, ולייבא data)
אני משתמש במערכת תוכן של חברה מסוימת (אחד המוצרים הכי גרועים שיכולים להיות),
ומה שיש לי זה html editor, שאני יכול לכתוב בו את קוד ה html שלי.
בכל מקרה, באחד מהעמודים הייתי צריך לייצר כמה תיבות טקסט, ולחצן "שלח" כדי לשמור את המידע ב DB,
לכאורה מאוד פשוט, הקוד אמור להיראות כך:
1 <form action="server.apsx" method="post">
2 <input type="text" name="txtName" />
3 <input type="text" name="txtPhone" />
4 <input type="submit" value="click" />
5 </form>
בשורה ראשונה אני מייצר את הטופס ומגדיר שבזמן לחיצה על ה "submit", ללכת לדף server.aspx.
בדף ההוא, אני לוקח את המידע, ושומר ב DB.
6 protected void Page_Load(object sender, EventArgs e)
7 {
8 string name = Request["txtName"];
9 string phone = Request["txtPhone"];
10 }
נראה פשוט, וזה באמת עובד.
אבל....
ברגע שהמשתמש הכניס אותיות עבריות, הייתי מקבל עבור כל תו עברי, את הקוד הבא "ufffd%".
חפרתי ברשת, ראיתי שעוד אנשים נתקלו במשהו דומה, אבל לא מצאתי פיתרון.
גיליתי שאם אני משנה את ה encoding על ידי קליק ימני בעכבר (באינטרנט אקספלורר) ל UTF-8, זה עובד, אמנם זה גורם שכל הדף הופך ל UTF-8, שזה אומר שכל התווים העבריים בדף יהפכו למין מלל לא ברור, אבל את הערכים מתיבות הטקסט, אני מקבל כמו שצריך.
אז חשבתי שפיתרון אחד יהיה, שלפני שאני לוחץ על submit, אני יכול לשנות את ה encoding של הדף.
אבל בסופו של דבר מצאתי פיתרון הרבה יותר טוב, ואני מקווה שמי שייתקל בבעייה הזאת, יוכל להשתמש בפיתרון הזה.
כתבתי את פונקציית ה JS הבאה:
1 <script type="text/javascript">
2 function EscapeAllInput(frm)
3 {
4 for (var i = 0; i < frm.length; i++)
5 {
6 frm[i].value = escape(frm[i].value);
7 }
8 }
9 </script>
10 <form action="server.apsx" method="post"
11 onsubmit="EscapeAllInput(this)">
12 <input type="text" name="txtName" />
13 <input type="text" name="txtPhone" />
14 <input type="submit" value="click" />
15 </form>
הפונקצייה מקבל טופס, רצה על כל ה inputs שמוגדרים, ועושה ל value המרה ל UTF-8.
על הטופס מוגדר שב onsubmit, יש להפעיל את הפונקצייה.
בצד השרת, יש להוסיף reference ל - Microsoft.JScript.dll
ולכתוב את הקוד הבא:
16 protected void Page_Load(object sender, EventArgs e)
17 {
18 string name = GlobalObject.unescape(Request["txtName"]);
19 string phone = GlobalObject.unescape(Request["txtPhone"]);
20 }
כעת, הכל עובד מצויין.