Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] umlauteproblem bei utf8

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] umlauteproblem bei utf8

    ich weiß, über dieses thema wurde bereits einige male sowohl in diesem, als auch in alle anderen foren bez. php schon mal behandelt. ich habe mir die letzten zwei tage auch unzählige themen durchgelesen und ausprobiert. irgendwo muss ich etwas falsch machen, ich weiß nur nicht wo. es heißt ja, dass sich str_replace, preg_replace mit utf-8 beißen; daher soll man ja die variable zu erst mit utf8_decode behandeln. sprich:
    mein charset:
    Code:
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
    PHP-Code:
    $var=utf8_decode()$var
    if(preg_match('#[^a-zA-Z0-9äöüß\040]#',$var)) {
       
    $strx=array('#[^a-zA-Z0-9äöüß\040]#','# +#','#ä#','#ö#','#ü#','#ß#');
       
    $stry=array(' ',' ','ae','oe','ue','ss');
       
    $var=preg_replace($strx,$stry,$var);
       
    $var=trim($var);
       return 
    $var;

    nun passiert aber etwas eigenartiges: wenn ich zu erst die funktion utf8_decode einsetze, macht er mir aus z. b.:
    fußpilz = fu ilz
    das heißt, php entfernt mir dabei sowohl das ß als auch das darauffolgende zeichen, also insgesamt 2 zeichen. php entfernt jegliche umlaute, obwohl diese doch oben bei preg_replace mit #[^a-zA-Z0-9äöüß\040]# doch angegeben wurden. auch die str_replace funktion habe ich ausprobiert. also:
    PHP-Code:
    $strx=array("ä","ö","ü","ß");
    $stry=array("ae","oe","ue","ss");
    $var=str_replace($strx,$stry,utf8_decode($var)); 
    auch die zweite variante macht es nicht besser. ich glaube, ich habe mitlerweile alle varianten ausprobiert, die in foren vorgeschlagen werden. ich habe bei allen keinen erfolg gehabt. zumindest schneidet es mir ohne utf8_decode lediglich die umlaute weg. mit utf8_decode entfernt es mir auch das darauffolgende zeichen. wo ist mein fehler?

  • #2
    Probier es doch bitte mal statt
    statt $var=utf8_decode()
    mit
    PHP-Code:
    for($i=0$i<strlen($var); $i++) {
      
    printf('%02X 'ord($var[$i]));
    }
    exit; 
    und sorge dafür, das $var das Wort fußpilz enthalten soll. Was wird ausgegeben?

    Kommentar


    • #3
      david, vielen dank für die schnelle reaktion zu dieser späten stunde. ich habe deinen code so eingefügt:
      PHP-Code:
      for($i=0$i<strlen($var); $i++) {
         
      printf('%02X 'ord($var[$i]));
      }
      exit;
      if(
      preg_match('#[^a-zA-Z0-9äöüß\040]#',$var)) {
        
      $strx=array('#[^a-zA-Z0-9äöüß\040]#','# +#','#ä#','#ö#','#ü#','#ß#');
        
      $stry=array(' ',' ','ae','oe','ue','ss');
        
      $var=preg_replace($strx,$stry,$var);
        
      $var=trim($var);
        return 
      $var;

      es wird ausgegeben: 66 75 E3 FF 70 69 6C 7A

      Kommentar


      • #4
        Dann soll also E3 FF für das ß stehen. Was auch immer das für ein Zeichensatz ist, es ist nicht utf8

        Kommentar


        • #5
          ich drehe noch durch. wenn ich anstatt utf-8
          Code:
          <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
          einsetze, schneidet es mir nicht die umlaute weg, ersetzt diese aber auch nicht mit 'ae','oe','ue','ss', obwohl in das array preg_replace es doch ersetzen sollte. außerdem soll man doch am besten immer utf-8 benutzen.

          ich erlebe seit 2 tagen verzweiflung in verschiedensten stärken. warum funktioniert utf8_decode nicht bei mir? man macht angaben zur zeichenkodierung, also charset=UTF-8".. für zeichenumwandlungen benutzt man dann brav utf8_decode und schon hat man herrliche "ae"s anstatt einem "ä". so heißt ja es in büchern und foren.

          Kommentar


          • #6
            warum funktioniert utf8_decode nicht bei mir
            Weil der Funktion kein utf-8 übergeben wird.
            mit
            for($i=0; $i<strlen($var); $i++) {
            printf('%02X ', ord($var[$i]));
            }
            wurde die Bytefolge der Zeichenkette $var ausgegeben. Und FF kommt nie in utf-8 vor.

            Kommentar


            • #7
              david, woran erkenne ich aber, in welcher zeichenkodierung übergeben wurde. ich meine, ich habe lediglich die meta-angabe als
              Code:
              <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
              . auch im form-tag habe ich eingefügt:
              Code:
              <form accept-charset="utf-8">
              woran kann ich denn erkennen, in welcher kodierung übergeben wird?

              Kommentar


              • #8
                Mit welchem Browser testest Du das denn?

                Kommentar


                • #9
                  ich teste mit mozilla, ie und chrome..

                  Kommentar


                  • #10
                    mal ne blöde Zwischenfrage?

                    Hast du die php-Datei selbst auch in UTF-8 konvertiert? (Aber ohne Bom, sonst wird ne ausgabe gemacht [meistens zumindest])
                    richtigen Header über php gesetzt?
                    PHP-Code:
                    header'Content-Type: text/html; charset=utf-8' ); 
                    ?

                    Wenn, dann sollte eigentlich alles funktionieren.

                    Kommentar


                    • #11
                      man macht angaben zur zeichenkodierung, also charset=UTF-8".. für zeichenumwandlungen benutzt man dann brav utf8_decode und schon hat man herrliche "ae"s anstatt einem "ä". so heißt ja es in büchern und foren.
                      ne - das ist Blödsinn.

                      Übrigens sind "ae" beim besten Willen nicht "herrlich" sondern Krüppel.

                      Kommentar


                      • #12
                        Zitat von tomtaz Beitrag anzeigen
                        mal ne blöde Zwischenfrage?

                        Hast du die php-Datei selbst auch in UTF-8 konvertiert? (Aber ohne Bom, sonst wird ne ausgabe gemacht [meistens zumindest])
                        richtigen Header über php gesetzt?
                        PHP-Code:
                        header'Content-Type: text/html; charset=utf-8' ); 
                        ?

                        Wenn, dann sollte eigentlich alles funktionieren.
                        nein nein, die frage ist gar nicht so blöd. ich als anfängerin habe gar nicht daran gedacht. pspad war auf ansi eingestellt. also habe ich alles auf utf-8 umgestellt. als dies trotzdem nicht klappte, habe ich meinen gesammten code in notepad eingegeben und mit utf-8 kodierung drüber gespeichert. es hat nicht funktioniert. mit davids funktion:
                        PHP-Code:
                        for($i=0$i<strlen($var); $i++) {
                          
                        printf('%02X 'ord($var[$i]));
                        }
                        exit; 
                        ist "fußpilz" trotzdem 66 75 E3 FF 70 69 6C 7A.
                        Zitat von Koala Beitrag anzeigen
                        ne - das ist Blödsinn.

                        Übrigens sind "ae" beim besten Willen nicht "herrlich" sondern Krüppel.
                        es ist mit großer wahrscheinlichkeit blödsinn, aber welche ist dann die sinnvolle umsetzung? bezüglich "ae"s: ich denke, ihre aussage ist recht subjektiv.

                        Kommentar


                        • #13
                          wieso denn subjektiv ?

                          ein "ä" ist ein "ä" und kein "ae".

                          In welche Sprache willst das "ä" denn Übersetzen ??

                          Den Code mußt übrigens trotzdem in utf8 speichern,
                          auch wenns jetzt erst mal nicht geklappt hat.

                          Kopier das mal in ne Testdatei mit der Endung php
                          und speichre sie utf-8 - codiert ab.
                          Wird der Inhalt korrekt angezeigt ?
                          PHP-Code:
                          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                          <html xmlns="http://www.w3.org/1999/xhtml">
                          <head>
                          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                          <title>Untitled Document</title>
                          </head>

                          <body>
                          <?pho echo 'Quaääääk !'; ?>
                          </body>
                          </html>

                          Kommentar


                          • #14
                            ja, koala. der inhalt wird korrekt angezeigt. mit genau 4 'ä's!

                            Kommentar


                            • #15
                              man sollte auf jeden fall einen geeigneten header senden; ob der browser eine meta-angabe zum zeichensatz im <head> interpretiert... ich würde mich nicht darauf verlassen.

                              utf-8 kollation zeichenkodierung - Google-Suche

                              cx

                              Kommentar

                              Lädt...
                              X