String in URL Form Umwandeln
-
The-Kenny schrieb:
Was ist für dich denn die "URL-Form"?
www.control4server.de/url_encoder.php
Krimpernikus schrieb:
ist euch eine Möglichkeit bekannt unter C einen String so umzuwandeln, dass sie die URL Form annehmen.
Ich habe schon einige möglichkeiten im Internet gefunden, diese beziehen sich aber alle leider nur auf Visual C.
Ist der der Unterschied zwischen C und C++ klar? Willst du wirklich C?
-
Also die URL Form schaut so aus.
Das%20ist%20eine%20URL%20Form%20ÄÜÖß
Quasi eigentlich nur die Leerzeichen durch ein % ersetzen!
-
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
