String in URL Form Umwandeln



  • Hallo,

    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.

    MFG

    Michael



  • Was ist für dich denn die "URL-Form"?

    http//bla.de/index.php ?
    Wenn ja, wie soll die URL-Form von z.B. "Test 123 foo bar" aussehen?



  • Leider weiß ich selbst nicht so genau was eine URL Form ist 😞

    Daher war auch meine Fragestellung absolut nichts sagend... Kannst Du mir helfen? 🤡



  • Krimpernikus schrieb:

    Daher war auch meine Fragestellung absolut nichts sagend... Kannst Du mir helfen? 🤡

    Troll...stopp den Wahn :p .



  • 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 "&auml" 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["ö"] = "&ouml";
    	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 🤡


Anmelden zum Antworten