kostenloser Webspace werbefrei: lima-city


mysql_real_escape_string() demaskieren und Umlautproblem

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    Hallo Leute

    Habe schonmal Google bemüht was für mich zu finden, aber bisher kam da nicht wirklich was bei raus

    Ich wollt mal gerne wissen ob es ne Funktion gibt, die mysql_real_escape_string() wieder demaskiert... oder muss ich das alles mit str_replace() machen? Fänd ich ziemlich umständlich, das muss doch irgendwie einfacher gehn, weil wenn ich mal sowas schreibe \" steht in der Datenbank ja \\" und alles sowas... je nachdem wie oft ich das mache, wirds ja immer schwerer das zu demaskieren...

    Gruß
    technofan
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. wüßte jetzt nicht wozu man das demaskieren müsste...
    man maskiert es ja nur wenn man in die Datenbank speichert und nicht einfach mal so und arbeitet dann mit dem maskierten String weiter.

    aber so könnte es gehen:
    http://de3.php.net/manual/de/function.stripslashes.php

    Grüßle

    Beitrag zuletzt geändert: 29.4.2009 20:53:05 von scout
  4. strip_slashes() sollte da helfen.
  5. Schau in die Datenbank rein. Dort dürften die Daten genau so stehen, wie du sie haben willst.
    Du brauchst die Daten also nicht wieder demaskieren.

    Wenn du die Daten in der Datenbank danach noch einmal überschreibst, musst du sie natürlich wieder mit mysql_real_escape_string() escapen.

    Beitrag zuletzt geändert: 29.4.2009 21:04:56 von bladehunter
  6. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    ok, das mit dem demaskieren geht jetzt... allerdings habe ich jetzt ein problem mit den Umlauten....

    $hp = mysql_real_escape_string(htmlentities($_POST['homepage'], ENT_QUOTES, "ISO-8859-1"))

    so sieht das ganze bei mir aus... klapt so weit auch alles einwandfrei.... aber die Umlaute halt net... kann mir da auch wer helfen??? der macht das nämlich net in ISO-8859-1 ... wieso auch immer... hier mal die Übersetzungen:

    ä ö ü ß Ä Ö
    ä ö ü ß Ä Ö Ü

    find ich schon komisch... hab schon versucht die zeichen zu ersetzen, klapt aber nicht...
    was muss man denn da machen?
  7. Du machst es Dir auch echt umständlich!

    1. Schau Dir mal die MySQLi Klasse an, dort genauer die Methode prepare(). Zwar wirst Du alle MySQL Abfragen umschreiben müssen, aber dass ist besser als alles per Hand zu machen.

    2. Stell Deine Datenbank auf UTF-8 um und setze in Deinen HTML Dateien die entsprechende Codierung ein. Dann brauchst Du die Umlaute nicht mehr umschreiben.

    3. Wenn Codezeilen hier postest verwende bitte den entsprechenden BBCode [ code] und [ /code] ohne Leerzeichen am Anfang. Dann sehen wir auch alles.
  8. technofan schrieb: ok, das mit dem demaskieren geht jetzt... allerdings habe ich jetzt ein problem mit den Umlauten....
    ...
    find ich schon komisch... hab schon versucht die zeichen zu ersetzen, klapt aber nicht...
    was muss man denn da machen?


    Das Umlautproblem beruht darauf, dass deine Webseite UTF-8 Zeichen entgegen nimmt (das auch gut ist) und an dich weiterreicht. Du allerdings von einer iso-8859-1 Kodierung ausgehst. UTF-8 in ISO-8859-1 zu konvertieren ist nur eingeschränkt möglich, da einfach der iso-8859-1 Zeichensatz weniger Zeichen enthält als der UTF-8 Zeichensatz.
    Um einem Konvertierungswahn zu entgehen ist es das Beste, wie strange schon schrieb, die Datenbank auch in UTF-8 anzulegen. Damit wärst du Zukunftssicher ;-)

    Grüßle
  9. Wenn man "mysql_real_escape_string ()" einen String maskieren lässt und ihn danach in die Datenbank einträgt, steht der unmaskierte String in der Datenbank.
    Das Problem mit den doppelten Backslashes entsteht häufig durch PHP, wenn Magic_Quotes aktiviert wurde.
    Magic_Quotes maskiert in allen per externen Varialben (also $_GET, $_POST und $_COOKIE) den Backslash.
    Wenn man nun die Funktion "mysql_real_escape_string ()" auf einen String aus den externen Variablen anwendet, so wird ein etwaiger Backslash, der bereit maskiert wurde, nochmal maskiert. So kommt es dazu, dass nachher in der Datenbank zwei Backslashes stehen.
    Das Problem hierbei liegt aber nicht an MySQL, sondern an Magic_Quotes.
    Umgehen kannst du Magic_Quotes durch die bereits genannte Funktion "stripslashes ()". Passende Code Snippets gibt`s bei Google.

    Gruß Lucas
  10. zum entfernen:
    function strip_request($data)
     {
        if(get_magic_quotes_gpc())
        {
          return stripslashes($data);
        }
        else
        {
          return $data;
        }
    }
    
    echo strip_request($_GET['iwas']); //Gibt normal aus, wie in querystring eingegeben


    hier zum escapen für db (MyBB)
    /**
    	 * Escape a string according to the MySQL escape format.
    	 *
    	 * @param string The string to be escaped.
    	 * @return string The escaped string.
    	 */
    	function escape_string($string)
    	{
    		if(function_exists("mysql_real_escape_string") && $this->read_link)
    		{
    			$string = mysql_real_escape_string($string, $this->read_link);
    		}
    		else
    		{
    			$string = addslashes($string);
    		}
    		return $string;
    	}
    
    /* Zum einfüggen in DB also dann*/
    mysql_query("Isert Into bla ... 'input'='".$db->escape_string($input)."'");
    
    //Also für _GET, _POST, _COOKIE	
      function escape_request($string)
      {
        if(!get_magic_quotes_gpc())
        {
            $string = $this->escape_string($string);
        }
    
        return $string;
      }
    /* Zum einfüggen in DB also dann damit kein doppel escape*/
    mysql_query("Isert Into bla ... 'input'='".$db->escape_request($_GET['input'])."'");


    Wegen Zeichensatz gibt es von Wordpress geile funktionen ... z.b

    function seems_utf8($Str) { # by bmorel at ssi dot fr
        	$length = strlen($Str);
        	for ($i=0; $i < $length; $i++) {
        		if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb
        		elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
        		elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
        		elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb
        		elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb
        		elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b
        		else return false; # Does not match any model
        		for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
        			if ((++$i == $length) || ((ord($Str[$i]) & 0xC0) != 0x80))
        			return false;
        		}
        	}
        	return true;
        }


    Hoffe konnte helfen.
    lg

    Beitrag zuletzt geändert: 1.5.2009 12:43:45 von zenks
  11. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    Also, ich hab mal nachgesehen und meine >Datenbank läuft bereits auf UTF-8 aber dennoch kommen diese Zeichen ...
  12. es kommt auf das encoding an, welches du beim Verbindungsaufbau nimmst...
    Versuchs mal mit dem Query... "SET NAMES 'utf8"

    Dann funktionierts vlt, ansonsten nimm die vom mir gepostete seems_utf8 Funktion und mach sowas wie

    function utf8($string)
    {
      if(!seems_utf8($string))
      {
        $string = utf8_encode($string);
      }
      
      return $string;
    }
  13. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    Also, habs jetzt hinbekommen... Hab die Datenbank an der falschen Stelle umgestellt und die Homepage an sich musste ja auch noch in utf-8 gemacht werden... jetzt klappt alles einwandfrei.
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!