Sonderzeichen in der REST-Anfrage

8

Ich entwickle eine API mit CodeIgniter und Phils RESTserver. Ich versuche, eine POST-Anfrage mit Sonderzeichen zu senden, aber die Zeichenfolge wird nicht zur Datenbank hinzugefügt.

CodeIgniter sagt auch, dass lastname benötigt wird (dass es nicht in der Zeichenkette vorhanden ist). Warum?

Ich verwende dieses Format:

%Vor%

Das ist mein String:

%Vor%

Es ist sehr wichtig, dass ich Sonderzeichen für die Internationalisierung verwenden kann.

Dankbar für alle Eingaben!

    
Jonathan Clark 09.12.2011, 12:01
quelle

5 Antworten

6

Sie sollten jeden Namen und Wert URI-encodieren. Hoffentlich stimmen sowohl der Client- als auch der Server-Code darin überein, dass UTF-8 zum Codieren der Oktette von Zeichen außerhalb des US-ASCII-Bereichs verwendet werden sollte (da frühere URI-Codierungsstandards nicht spezifisch waren und es Legacy-Code gibt, der andere versucht) Kodierungen), so wird Ihr Beispiel:

firstname=Andrew&lastname=%C3%85sberger

Genau wie im Abfrageteil eines URI, der mit einem GET verwendet wird.

    
Jon Hanna 09.12.2011 12:18
quelle
3

Es scheint, als ob Sie ein Codierungsproblem haben. Sie müssen sicherstellen, dass Sie UTF8 von Ende zu Ende verwenden: Client (Browser), Server (PHP), Db-Verbindung und db. Ich nehme an, Ihre DB-Tabelle (n) sind bereits UTF8, aber was viele vergessen, ist die Verbindung zur Datenbank. Direkt nachdem Sie eine Verbindung zur Datenbank hergestellt haben, sollten Sie die "Abfrage" SET NAMES UTF8 ausführen. Nicht sicher, ob CodeIgniter die DB-Verbindung verwendet, um Zeichen zu entkommen.

Ich verwende keinen CodeIgniter, aber wenn er nicht die richtige Kodierung verwendet, werden Doppelbyte-Zeichen in 2 Zeichen erweitert. Wenn Sie beispielsweise urlencode ('Å') ausführen, wird% C3% 85 zurückgegeben, nicht% C5. Dies ist eine SQL-Injection-Methode. Wenn eines der Zeichen, zu dem es "dekodiert", ein "oder" ist, dann gibt es ein Problem mit einem Zitat / eine Sicherheitslücke. Dies könnte dazu führen, dass CodeIgniter die Zeichenfolge falsch auswertet.

Schließlich machst du deine POST über Javascript? Javascript unterstützt die UTF8-Codierung nicht, daher verursacht es einige Probleme, abhängig davon, wie Sie POST ausführen. Sie können Javascript verwenden, um ein HTML-Formular POST zu senden, aber Sie können Probleme auftreten, wenn Sie versuchen, einen AJAX-Beitrag mit Strings Sie selbst machen. Obwohl unescape (encodeURIComponent (s)) angeblich funktioniert.

    
Brent Baisley 12.12.2011 02:33
quelle
2

Ich hatte einmal ein ähnliches Problem, als ich Produkte mit speziellen Zeichen in den Warenkorb einfügte und meine URLs erstellte

Nicht sicher, aber es könnte von einem anderen Standpunkt aus hilfreich sein. Ich hatte auch ein my_url_helper zusätzlich für mein Projekt hinzugefügt, um mit URLs umzugehen. mb_string behandelt Char-Ersetzungen sehr gut. Entschuldigung für meine schlechte Sprache. :(
Datei: application / config.php

%Vor%     
Murat Ünal 13.12.2011 14:23
quelle
1

Ich bin mit CodeIgniter nicht besonders vertraut; jedoch dies:

​​Codeigniter scheint $ _POST des '£' Charakters zu brechen (Pound )

... könnte relevant sein. Das Problem liegt möglicherweise in Ihrem Server-Stack, nicht in Ihrem Code oder Framework! Ansonsten, hier sind einige zusätzliche Links, die andere Bereiche von Interesse w.r.t adressieren. CodeIgniter und UTF-8:

Ссылка

Ссылка

Hoffe, das hilft.

    
David O'Riva 16.12.2011 22:40
quelle
0

Es ist nicht MongoDb, weil Sie nicht bekommen, was Sie von der Post brauchen.

Ich bin mir fast ganz sicher, dass es Ihre Codierungsdetails sind, die nicht von Client zu Server passen.

Andere Vorschläge zur Standardisierung auf UTF-8 sind eine gute Vorgehensweise, aber wenn Sie nicht möchten, stellen Sie sicher, dass Sie ein Kodierungsschema verwenden, das mit Ihren Zeichen funktioniert und sowohl auf der Clientseite als auch auf der Serverseite verwendet wird .

Ich bin kein Experte für PHP, aber Sie erhalten normale Zeichen (B) plus Sonderzeichen (& amp; und%) und sind normal Zeichen (% 26) ... aber keine Sonderzeichen wie %C3%85 .

Aktualisieren Sie einige weitere Informationen darüber, wie Sie auf dem Server veröffentlichen, und ich werde mehr ausführen.

    
one.beat.consumer 16.12.2011 17:56
quelle

Tags und Links