Send the inputs from the "Form" of html page to .aspx file (change the encoding – using escape)

25 בפברואר 2009

4 תגובות

 


בתקופה האחרונה אני מרגיש שחזרתי לימי הבניים,

 

אני עובד על פרויקט 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 }


 

כעת, הכל עובד מצויין.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

4 תגובות

  1. daniel25 בפברואר 2009 ב 13:01

    בצד שרת ניתן להשתמש גם ב Server.UrlDecode
    במקום קישור ל Microsoft.JScript.dll

    הגב
  2. משה1 במרץ 2009 ב 17:57

    אני לא רוצה להעליב או לפגוע, אבל נראה לי ששיטת הטפסים בשרת מעוותת משמעותית את צורת העבודה של אנשים.

    אני מבין את בעיית הקידוד שנתקלת בה עכשיו (אגב, יש לה פיתרון פשוט יותר אאל"ט), אבל לענ"ד – זו השיטה הנכונה לעבוד איתה, כזו שלא תתעלל במשאבי השרת על רנדור אלפי פקדים מיותרים.

    הגב
  3. Rotem Bloom2 במרץ 2009 ב 17:29

    למה אתה לא יכול להחליט עם איזה Globalization לעבוד ב-WEB.CONFIG דרך:?

    הגב
  4. shlomo2 במרץ 2009 ב 17:43

    בגלל שאני כותב בתוך מערכת תוכן, ויש לי רק html

    הגב