Encoding Leerzeichen in UITextView / UITextField zu URL-Format

8

Ich versuche, den Inhalt von UITextView oder UITextField als Parameter an eine PHP-Datei

zu senden %Vor%

Wenn ich urlstr protokolliere, ist das URL-Format ok, solange UITextView oder UITextField keine Leerzeichen enthalten. Wie würde ich die Leerzeichen in% 20 konvertieren?

Bearbeiten

Hier ist der Code, der nicht nur abstürzt, sondern auch die URL richtig codiert.

name = John Doe & amp; tags = wiederkehrender Alptraum & amp; entry = Testen testen testen

wird in

konvertiert

name = John -1844684964oe & amp; tags = reportingightmare & amp; entry = Testen 4.214929e-307sting -1.992836e + 00sting

%Vor%     
bcsantos 27.05.2009, 18:54
quelle

3 Antworten

14

Sie sollten die gesamte Zeichenfolge nicht URL-escapen, sondern URL-Escape der dynamischen Komponenten. Probieren Sie

aus %Vor%

Das zweite Problem mit Ihrem Code (und zweifellos der Grund für den ungeraden Druck) ist, dass Sie die Zeichenfolge direkt an NSLog übergeben, so dass sie als Formatzeichenfolge behandelt wird. Sie müssen

verwenden %Vor%

stattdessen. Dadurch wird es wie erwartet gedruckt.

Bearbeiten: Ein drittes Problem mit Ihrem Code besteht darin, dass Sie automatisch freigegebene und im Besitz befindliche Objekte mischen und dann am Ende alle freigeben. Sehen Sie sich die 3 Objekte an, die Sie erstellen und die Sie später freigeben. Eine davon sollte nicht später veröffentlicht werden, da sie mit einer Methode erstellt wurde, die nicht mit den Wörtern alloc, copy oder new beginnt. Die Identifizierung des fraglichen Objekts ist eine Übung, die dem Leser überlassen wird.

    
Kevin Ballard 27.05.2009, 19:41
quelle
20

Tatsächlich enthalten alle vorherigen Antworten zumindest einige Ungenauigkeiten, die für viele gemeinsame Werte von Benutzer bereitgestellten Text in den TextFields nicht korrekt mit dem Server kommunizieren

stringByAddingPercentEscapesUsingEncoding: percent entkoppelt alle Zeichen, die keine gültigen URL-Zeichen sind. Diese Methode sollte einmal auf die gesamte URL angewendet werden.

Eine vorherige Antwort behauptet, dass stringByAddingPercentEscapesUsingEncoding: in vielen Skriptsprachen wie die Klassen zum Erstellen von URLs funktioniert, wobei Sie sie nicht auf die gesamte URL-Zeichenfolge anwenden sollten, aber nicht. Jeder kann dies leicht überprüfen, indem er seine Ausgabe für unescaped & s und ? s überprüft. Es ist also in Ordnung, sie auf die gesamte Zeichenfolge anzuwenden, es reicht jedoch nicht aus, sie auf Ihren 'dynamischen' URL-Inhalt anzuwenden.

Die vorherige Antwort stimmt damit, dass Sie den Namen und Werten, die in Ihre CGI-Abfragezeichenfolge eingehen, noch mehr Arbeit widmen müssen. Da CGI durch RFC3875 spezifiziert ist, wird dies oft als RFC3875 Prozent Escaping bezeichnet. Es stellt sicher, dass Ihre Namen und Werte keine Zeichen enthalten, die gültige URL-Zeichen sind, die aber in anderen Teilen der URL von Bedeutung sind ( ; , ? , : , @ , & , = , $ , + , { , } , < , > und , )

Es ist jedoch sehr wichtig, dass Sie auch die einfachen URL-Escapes für die vollständige Zeichenfolge abschließen, um sicherzustellen, dass alle Zeichen in der Zeichenfolge gültige URL-Zeichen sind. Während Sie in Ihrem Beispiel nicht, im Allgemeinen könnte es Zeichen in einem "statischen" Teil der Zeichenfolge, die nicht gültige URL-Zeichen sind, so müssen Sie diese ebenfalls entkommen.

Leider gibt NSString uns nicht die Möglichkeit, die signifikanten Zeichen von RFC3875 zu umgehen, also müssen wir in CFString abtauchen, um dies zu tun. Offensichtlich ist die Verwendung von CFString ein Schmerz, also füge ich normalerweise Category zu NSString wie folgt hinzu:

%Vor%

Mit dieser Category an Ort und Stelle konnte das ursprüngliche Problem korrekt mit dem folgenden gelöst werden:

%Vor%

Dies ist eine kleine Variable schwer, nur um klarer zu sein. Beachten Sie auch, dass die für stringWithFormat: bereitgestellte Variablenliste nicht nil beendet sein sollte. Die Formatzeichenfolge beschreibt die genaue Anzahl der Variablen, die darauf folgen sollen. Außerdem sollten die Strings für Query-String-Namen (Name, Tags, Eintrag, ..) technisch selbstverständlich durch stringByAddingPercentEscapesUsingEncoding: laufen, aber in diesem kleinen Beispiel können wir leicht erkennen, dass sie keine ungültigen URL-Zeichen enthalten.

Um zu sehen, warum die vorherigen Lösungen nicht korrekt sind, stellen Sie sich vor, dass der Text der Benutzereingabe in dreamEntry.text ein & enthält, was nicht unwahrscheinlich ist. Bei den vorherigen Lösungen würde der gesamte Text, der diesem Zeichen folgt, zu dem Zeitpunkt verloren gehen, zu dem der Server diesen Text erhalten hat, da das nichtskapierte Et-Zeichen vom Server als Ende des Wertteils dieses Abfrage-String-Paares interpretiert wird.

    
barrycburton 10.11.2010 00:34
quelle
0

Sie können Ihre URL nehmen und verwenden:

%Vor%     
Heat Miser 27.05.2009 18:59
quelle