escape string @ asp

gonlife

Mitglied
Hallo Leute.

Ich habe ein Webformular, welches man ausfüllen kann und Senden. Da die Schweiz ein vielsprachiges Land ist und Französisch dazugehört, gehört bei den Kommentären ein ' einfach dazu, was mein ASP Scrip zum fall bringt. Ich habe vieles von der Funktion escape string gelesen, aber nur auf PHP. Nu kann mir einer Erklären wie das auf ASP funktioniert ?


MfG

Gonlife


p.s.

Hier ein kleiner Ausschnitt aus dem Tool ..
PHP:
SQLStr = "INSERT INTO Umfrage(" & rst.Fields(1).Name
ValStr = ") VALUES('" & FirstVal & "'"

p.p.s.

Alles wird in eine DB geschrieben und dann per Mail versendet.
 
Hallo gonlife,

in ASP werden ja Skriptsprachen eingesetzt, VBScript, JavaScript, daher ist es immer eine Frage der Sprache. In VBScript gibt es dazu die Funktion Replace, sähe z.B. so aus:
Text = Replace(Text, "'","''")

Damit werden die Hochkommas verdoppelt und stellen somit kein Problem mehr für die Datenbank dar. Allerdings gibt es noch mehr Zeichen, die Problem machen können, z.B. Eckige Klammern [ ]. Ich habe dazu eine Funktion namens SQLEncode geschrieben, die derartiges behandelt. Eckige Klammern, Prozentzeichen und der Unterstrich machen z.B. bei Suchmaschinen Probleme, dann sollte unbedingt SQLEncode eingesetzt werden. Link zur Funktion:
http://www.asphelper.de/tip/tip50.asp
 
Also das mit dem Replace ist schon klar. Aber ich hab das mal (bevor ich Deinen Tipp gelesen hab) einfach nur mit replace probiert, und es hat mein Hochkomma verdoppelt. Aber nur eben das erste, das gefunden wurde, wenn ich mehrere (verteilt, nicht hintereinander) im Text habe, ging das nicht. Beachtet Dein Script mehrere Vorkommnisse?
 
Hallo PingpongRueppel,

Ja, meine Funktion beachtet auch mehrfache Vorkomnisse. Daß Deine Replace-Anweisung nur einmal ein Zeichen beachtet hat, liegt eventuell am Aufruf von Replace, denn dort kann man vorschreiben, daß nur einmal der gesuchte String durch einen anderen ersetzt werden soll:
Text = Replace(Text, "A","B", ,1)
Damit wird nur ein A durch ein B ersetzt, alle anderen A bleiben im Skript so erhalten.
 
Geht das nicht das er ihn Einach als Text Interpretiert ? So wie ich dein "Tool" verstehe wird aus


C'est la vie, ein C''est la vie


PHP:
FirstVal = Replace(FirstVal, "'", " ")

Würde das nun alle ' durch einen Leerschlag ersetzten ?
 
Zuletzt bearbeitet:
Hallo gonlife,

es ist korrekt, daß aus einem Hochkomma zwei Hochkommas werden, in die Datenbank wird jedoch nur ein einzelnes Hochkomma geschrieben. Auch die anderen Zeichen werden nur für die Datenbank geschrieben, der Text jedoch wird nicht geändert. Man muss das verstehen wie eine Ausgabe, wenn man in VBScript ein Doppeltes Hockomma, Anführungszeichen ( " ) schreiben möchte, muss man dies in der Response.Write Anweisung einfach verdoppeln, dann wird ein einzelnes ausgegeben, und nicht 2. So ist es auch mit SQLEncode. Wenn dann in einem Text ein einfaches Hochkomma auftaucht, wird dies verdoppelt. Die Datenbank interpretiert dies dann nicht als SQL-Anweisung, sondern als Text. Heisst: Der Text wird einfach als Text interpretiert.

Übrigens gibt es ja 2 Möglichkeiten, Text in eine Datenbank zu schreiben, einmal per Insert Into und der ADO-Anweisung Recordset.Addnew. Mit Addnew hat man nicht die Probleme der Sonderzeichen. Allerdings kann/sollte man nicht alles per ADO machen, z.B. das Suchen in Datensätzen (Select * from Tabelle Where xy LIKE 'abc'). Hier sollte man auf SQL setzen, und da sollte man wieder SQLEncode einsetzen. Problematisch bei den Sonderzeichen ohne SQLEncode: Hacker können so ein paar Hübsche Einblicke in die Datenbank nehmen. Deshalb SQLEncode einsetzen!

>FirstVal = Replace(FirstVal, "'", " ")
>Würde das nun alle ' durch einen Leerschlag ersetzten ?
Ja, nur:
>Geht das nicht das er ihn Einach als Text Interpretiert ?
Das wiederspricht sich doch! Entweder er interpretiert jedes Zeichen so wie geschrieben, was mit SQLEncode so ist, oder ich lösche alle Problematischen Zeichen. Und bei Suchanweisungen (also Select * from Tabelle Where....) reicht die Behandlung nur des Hochkommas nicht aus, siehe dazu meinen Text aus Tipp 50.
 
Bei deinem Tipp stehts so:


Code:
Public Function SQLEncode(ByVal strText)

    If len(strText) > 0 Then
        strText = Replace(strText, "'", "''")
    End If
    
    SQLEncode = strText
End Function

Ich mag ASP nicht, leider ist das die Vorgabe :(.

Also müsste meins etwa so Aussehen

Code:
FirstVal = Request("V_" & rst.Fields(1).Name)
FirstVal = Replace(FirstVal, "'", " ")


Ach noch ne Frage so nebenbei. Kann ich mit JS oder normal HTML, etwas Schreiben, dass wenn ich einen Bereich der Seite verlasse, das ganze Frameset neu Ladet, statt nur den "inhalt" (hauptframe)

@Klaus Keller.. THX
 
Zuletzt bearbeitet:
Hallo gonlife,


Code:
Public Function SQLEncode(ByVal strText)

    If len(strText) > 0 Then
        strText = Replace(strText, "'", "''")
    End If
    
    SQLEncode = strText
End Function
Da hast Du aber etwas missverstanden! Du muss die fertige Funktion SQLEncode aus der Datei Suchen.asp entnehmen, oder aus dem Tipp. Diese ist 39 Zeilen gross und behandelt die Eckigen Klammern, das Hockomma, das Prozentzeichen und den Unterstrich.

>FirstVal = Request("V_" & rst.Fields(1).Name)
>FirstVal = Replace(FirstVal, "'", " ")
Wenn das ganze mit SQLEncode laufen soll, und der originale Text somit erhalten bleiben soll, sollte das so aussehen:
FirstVal = Request("V_" & rst.Fields(1).Name)
FirstVal = SQLEncode(FirstVal)

>Ach noch ne Frage so nebenbei. Kann ich mit JS oder normal HTML, etwas
>Schreiben, dass wenn ich einen Bereich der Seite verlasse, das ganze
>Frameset neu Ladet, statt nur den "inhalt" (hauptframe)
Ein Frame kann man per JS-Skript so ändern:
parent.FrameName.location.replace('Adresse');

Dennoch würde ich prüfen, ob es möglich ist, daß all dies ohne JS möglich ist. Das hängt von der Struktur Deiner Programmierung bzw. der Seiten ab. Wenn dann ein HTML-Refresh zum Einsatz kommt, einen Button/Link zur Verfügung stellen, damit Besucher darauf klicken können, wenn ein HTML-Refresh im verwendetem Browser nicht funktioniert. Ich selbst setze in vielen Bereichen kein Frame mehr ein, eben weil oftmals mehrere Frames gleichzeitig geändert werden müssen, und weil dies sehr oft nicht ohne JS abgeht. Natürlich gibt es auch noch andere Gründe gegen Frames.
 

Neue Beiträge

Zurück