String in URL Form Umwandeln
-
Krimpernikus schrieb:
Quasi eigentlich nur die Leerzeichen durch ein % ersetzen!
Also wenn dann schon durch ein "%20". Und die Umlaute müsste man eigentlich auch umsetzen, mit "ä" oder wie das geht.. :#)
-
Da hab ich nun ein Problem.
replace(request.begin(), request.end(), ' ', '%20');geht leider nicht.
replace(request.begin(), request.end(), ' ', '%');geht
Naja wenn jemand einen Tipp hat wäre ich echt dankbar.
-
Hi,
vielleicht fällt Dir der Unterschied zwischen '%' und '%20' selbst auf.
Kleiner Tipp: Zähl mal die Buchstaben.
Gruß,
Simon2.
-
Ja das hab ich auch schon bemerkt, aber ich hab einige beispiele gesehen wo winNT duch win2000 ersetzt wurde und das ist ja wohl auch unterschiedlich
-
Geht nur darum, dass man mit '' einen Buchstaben maskiert und mit "" mehr als einen.. Tip: %20 sind drei

-
Naja mein Problem ist, dass ich leider keine Einfache möglichkeit gefunden habe einzelne Zeichen in einem String durch die für eine URI nötigen ersetzen kann.
aus ' ' wird z.b. ein %20
das ist ja einfach ein Hex Zeichen aber wie füge ich das in den String ein?
MFG
Michael
-
%20 ist definitiv kein Hex-Zeichen (was auch immer ein Hex-Zeichen sein soll)! "%20" ist ein string, eine Zeichenkette.
-
Krimpernikus schrieb:
Naja mein Problem ist, dass ich leider keine Einfache möglichkeit gefunden habe einzelne Zeichen in einem String durch die für eine URI nötigen ersetzen kann.
OMFG zum 3. Mal: Du übergibst kein Zeichen sondern einen String!!!
Zeichen werden mit ' ' angegeben, strings mit " "!!! Checkst du das nicht?
-
-
ich checke es schon aber es geht einfach nicht. Ersetze ich ' ' duchr 'A' geht es ersteze ich " " "A" geht es
will ich nun aber " " duch "AB" erstezen geht es nicht!
-
// Gibt den neuen String zurück. Die Elemente in der map geben an, welche Strings durch was ersetzt werden sollen. string ReplaceTokens( const string& orig, const map<string,string>& tokens ) { // Dieser String wird am Schluss zurückgegeben string ret; // In der Schleife wird der gesamte String durchlaufen for ( string::const_iterator origIter=orig.begin(); origIter!=orig.end(); origIter++ ) { // Hier wird geschaut, ob beim/ab dem nächsten Zeichen etwas ersetzt werden muss bool is_token = false; for ( map<string,string>::const_iterator tokenIter=tokens.begin(); tokenIter!=tokens.end(); tokenIter++ ) { // Nur vergleichen, wenn der zu ersetzende String überhaupt noch enthalten sein kann if ( origIter + tokenIter->first.size() < orig.end() ) { // Vergleichen... if ( string( origIter, origIter+tokenIter->first.size() ) == tokenIter->first ) { // Den neuen String anhängen ret += tokenIter->second; // Die ersetzte Stelle im Original-String überspringen origIter += tokenIter->first.size() - 1; // Und angeben, dass wir etwas ersetzt haben is_token = true; break; } } } // Wurde nix ersetzt, dann den momentanen Buchstaben hintendran hängen if ( ! is_token ) ret += *origIter; } return ret; } int main(int argc, char *argv[]) { string orig = "Hello Wörld"; map<string,string> tokens; tokens[" "] = "%20"; tokens["ö"] = "ö"; string result = ReplaceTokens( orig, tokens ); cout << result << endl; return 0; }
-
Das macht aber nicht das gewollte. Die URL-Kodierung schreibt vor, dass alle nicht-alphanumerischen Zeichen außer ., _, - und ~ in der Form %xx, mit xx als Hexdarstellung des Bytewertes übersetzt werden. Empfohlen ist außerdem, UTF-8 zur Kodierung zu verwenden. ö wäre also "%C3%B6". Das ist mit isalnum(c) aus <cctype> leicht abzuhandeln (und fängt auch Nicht-ASCII-UTF-8-Zeichen ab).
std::string to_url_string (std::string const& s) { std::string result; for (std::string::const_iterator i = s.begin (); i != s.end (); ++i) { if (!std::isalnum (*i) || *i == '_' || *i == '-' || *i == '.' || *i == '~') result += escaped_char (*i); else result += *i; } return result; }(escaped_char kannst du ruhig selbst machen ;))
Falls die Eingabe eine komplette URL ist muss des Weiteren beachtet werden, dass Zeichen wie /, # oder & innerhalb von URLs eine Sonderbedeutung haben und damit nur escaped werden dürfen, wenn sie nicht in dieser Sonderbedeutung sondern als „Wert“ auftreten.
-
.filmor schrieb:
Das macht aber nicht das gewollte. Die URL-Kodierung schreibt vor, dass alle nicht-alphanumerischen Zeichen außer ., _, - und ~ in der Form %xx, mit xx als Hexdarstellung des Bytewertes übersetzt werden.
Na gut, kenne mich halt mit Web-Krams kaum aus
