דרכים להמנע מבעיות נפוצות של גרשים ומרכאות

‏ • 17 באפריל, 2002

כל מתכנת נתקל לפעמים בבעיות בעדכון או שליפה נתונים מבסיס נתונים או הצגת טקסט בשדות INPUT, כאשר המחרוזות מכילות גרשים או מרכאות.

מאמר זה מציע דרכים להמנע מבעיות אלו.

שתי הבעיות הספציפיות של גרשים ומרכאות



  • גרשים, כשאתה מכניס מחרוזת לתוך מסד נתונים דרך update או insert (בניגוד ל- ado)
  • מרכאות, כשאתה פולט מחרוזות בתוך שדות input type=text. זה לא תקף לגבי textarea.

החוק שעובד ברוב המקרים הנפוצים

– כשאתה מכניס ערך ל- input דרך ה-value, תצטרך להקיף את value במרכאות ולא בגרשים, ולהחליף מרכאות ב- "


1
2
3
4
5  

<%
    str=Request("val")
    str=Replace(str,"""",";quot&")
%>
<INPUT TYPE="text" NAME"txt" VALUE="<%=str%>">


כשאתה משרשר מחרוזות לתוך משתנה strSql, עליך להכפיל גרשים.


1
2
3
4
5  

<%
str=Request("string")
strSql= "SELECT * FROM tbl WHERE stringFld='"& Replace(str,"'",""") &"'"
rs.Open strSql,conn
%>


הבהרה:


  • גרש – מה שיוצא כשאתה לוחץ על W במצב עברית (')
  • גרשיים – פעמיים גרש (")
  • מרכאות – ".



שתי פונקציות VBscript שעשויות לעזור



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18  

<%
function rQuote(strText)
    if not IsNull(strText) then
        rQuote = Replace(strText, """", "&quot;")
    else
        rQuote = ""
    end if
end function

function rGeresh(strText)
    if not IsNull(strText) then
        rGeresh = Replace(strText, "'", """)
    else
        rGeresh = ""
    end if
end function

%>


:דוגאמות לשימוש


<input type=text value="<% =rQuote(strText) %>" size=15>

strSql = "INSERT INTO tbl (stringFld) VALUES ('" & rGeresh(strText) & "')"

מקרים מיוחדים


המקרים הפחות ספציפיים הם כשיש שימוש בסקריפט צד קליינט ואז גרש צריך להפלט כ- ', אבל זה כבר לפי מקרים ספציפיים ואין חוק כללי.

בהצלחה!

תגיות: , , , , , ,

תגובות בפייסבוק