dieter: textfeld sonderzeichen

Hi

hab wiedermal eine frage. ich verwalte jetzt unter anderem eine hp und da hat mein vorgänger ein gästebuch geschrieben. der text wird in ein textfeld eingetragen und im anschließendem phpscript werden laut seinen kommentaren sonderzeichen in html code umgewandelt mit folgendem code:

$inhalt = htmlspecialchars($inhalt);

das funktioniert aber net ganz so, wies sollte.
er macht zum beispiel aus "ä" "Ã". "ö" macht er zu "ö".

weiß wer, wo der fehler liegt?

danke schonmal

dieter

  1. Moin!

    $inhalt = htmlspecialchars($inhalt);

    sorgt ledigkich dafür, dass < in html-codes umgewandelt wird, und ' bzw " escapet wird ("  '), wober hier die funktion htmlentities(); vorzuziehen ist, weil man diese funktion auch wieder rückgängig machen kann (html_entity_decode(); ).
    http://de2.php.net/manual/de/function.htmlentities.php
    http://de2.php.net/manual/de/function.html-entity-decode.php

    um umlaute zu ersetzten müsste sowas stehen:

    $match = array('ä','ö','ü','ß','Ä','Ö','Ü');
    $replace = array('&auml;','&ouml;','&uuml;','&szlig;','&Auml;','&Ouml;','&Uuml;');
    str_replace($match,$replace,$text);

    siehe auch
    http://de2.php.net/manual/de/function.str-replace.php

    tschüss ichen

    --
    Selfcode: sh:( fo:| br: n4:& ie:% mo:| mo:| de:] zu:) fl:| ss:| ls:[ js:|
    1. Hello,

      In der Datei würe ich aber ASCII-Rohdaten speichern und erst bei der Wiederausgabe der Daten an den Browser die Ersetzungen durchführen.

      echo nl2br(htmlentities($dateiinhalt));

      So bleiben die Daten in der Datei so rein wie möglich und sind z.B. auch leiht durchsuchbar.

      Man sollte aber vor dem Abspeichern auch auf get_magic_quotes_gpc() achten und ggf. die von PHP hinzugefügten Backslashes wieder entfernen.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
    2. Hallo ichen!

      Diese Funktion ist mit htmlspecialchars() identisch, ausser dass alle Zeichen, die HTML-Code-Entsprechungen haben, in diese Codes umgewandelt werden.

      $inhalt = htmlspecialchars($inhalt);

      sorgt ledigkich dafür, dass < in html-codes umgewandelt wird,
      und ' bzw " escapet wird ("  '), (...)

      Nicht escapt (mit ein Backslash), sondern folgendermaßen ersetzt:
       '&' -> '&amp;'
       '"' -> '&quot;'
       ''' -> '&#039;' (wenn ENT_QUOTES gesetzt ist)
       '<' -> '&lt;'
       '>' -> '&gt;'

      (...) wober hier die funktion htmlentities(); vorzuziehen ist,
      weil man diese funktion auch wieder rückgängig machen kann
      (html_entity_decode(); ).
      [...]
      um umlaute zu ersetzten müsste sowas stehen:

      $match = array('ä','ö','ü','ß','Ä','Ö','Ü');
      $replace = array('&auml;','&ouml;','&uuml;','&szlig;','&Auml;','&Ouml;','&Uuml;');
      str_replace($match,$replace,$text);

      Nö, warum? Im PHP-Manuel steht zu der Funktion htmlentities() folgendes geschriben.

      (Zitat:) "Diese Funktion ist mit htmlspecialchars() identisch, ausser dass alle Zeichen, die HTML-Code-Entsprechungen haben, in diese Codes umgewandelt werden."

      Die Betonung liegt hier auf "alle Zeichen". Auch wird im PHP-Handbuch in der Beschreibung zur Funktion html_entity_decode() erwähnt, dass Umlaute konvertiert werden.