Ankündigung

Einklappen
Keine Ankündigung bisher.

utf8 GET/POST Variablenproblem

Einklappen

Neue Werbung 2019

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

  • utf8 GET/POST Variablenproblem

    Hallo Leute, ich bin mir nicht sicher ob es ein php Problem ist. Ich versuche es dennoch.
    Bei der Installation von SugarCRM habe ich festgestellt dass ich keine Umlaute verwenden kann. Alles ab dem Ulaut wird abgeschnitten.
    Auf der suche nach dem Fehler bin ich soweit zu behaupten dass es sich um einen Server/Php Configurationsproblem handelt.
    Ich poste euch ein Script mit dem ich das Problem verdeutlichen kann. Das seltsame ist, auf meinen Debian System tritt die Sache nicht auf, aber auf dem SLES 10 schon.

    PHP-Code:

        <?php
        
    function display_form() {
          global 
    $PHP_SELF;
        
    ?>
        <FORM TARGET="<?php echo $PHP_SELF?>" METHOD=POST>
        test: <INPUT TYPE=TEXT NAME="test" VALUE="wassdö|ä|ä|ßn" accept-charset="utf-8">wassdö|ä|ä|ßn
        <INPUT TYPE=HIDDEN NAME="stage" VALUE="results">
        <INPUT TYPE=SUBMIT VALUE="Thanks!">
        </FORM>
        <?php
        
    }
        
    ?>

        <?php
        
    function process_form() {
          global 
    $HTTP_RAW_POST_DATA;
          echo 
    "<br>";
          echo 
    string2hex("wassdö|ä|ä|ßn");
          echo 
    "<br>";
          echo 
    string2hex($_POST['test']);
          echo 
    "<br>";
          echo 
    string2hex(urlencode("wassdö|ä|ä|ßn"));
          echo 
    "<br>";
          
    $putdata fopen"php://input" "rb" );
          while(!
    feof$putdata ))
            echo 
    fread($putdata4096 );
          
    fclose($putdata);
          echo 
    "<br>";
          echo 
    $HTTP_RAW_POST_DATA;
        }

        
    ?>

    <html>
       <head>
           <meta http-equiv=Content-Type content="text/html; charset=utf-8" />
       </head>
       <body>
    <?php
    if (empty($_POST['test'])) { display_form(); }
    else { 
    process_form(); }
    ?>

    </body>
    </html>



     <?
    function string2hex($str)
    {
      if (trim($str)!="")
      {
        $hex="";
        $length=strlen($str);
        for ($i=0; $i<$length; $i++)
        {
          if ($i>0) $bound="-"; else $bound="";
          $hex.=$bound.str_pad(dechex(ord($str[$i])), 2, 0, STR_PAD_LEFT);
        }
        return $hex;
      }
    }
    ?>
    Meinem Verständnis nach sollte die Zeile 1 und 2 der Ausgabe des Scriptes natürlich gleich sein. Auf dem Debian ist es ja auch, auf dem Suse aber nicht.

    Ausgabe auf Debian:
    77-61-73-73-64-c3-b6-7c-c3-a4-7c-c3-a4-7c-c3-9f-6e
    77-61-73-73-64-c3-b6-7c-c3-a4-7c-c3-a4-7c-c3-9f-6e
    77-61-73-73-64-25-43-33-25-42-36-25-37-43-25-43-33-25-41-34-25-37-43-25-43-33-25-41-34-25-37-43-25-43-33-25-39-46-6e
    test=wassd%C3%B6%7C%C3%A4%7C%C3%A4%7C%C3%9Fn&stage =results
    test=wassd%C3%B6%7C%C3%A4%7C%C3%A4%7C%C3%9Fn&stage =results

    Ausgabe auf Suse:
    77-61-73-73-64-c3-b6-7c-c3-a4-7c-c3-a4-7c-c3-9f-6e
    77-61-73-73-64-8f-ab-d3-7c-8f-ab-a3-7c-8f-ab-a3-7c-8f-a9-ce-6e
    77-61-73-73-64-25-43-33-25-42-36-25-37-43-25-43-33-25-41-34-25-37-43-25-43-33-25-41-34-25-37-43-25-43-33-25-39-46-6e
    test=wassd%C3%B6%7C%C3%A4%7C%C3%A4%7C%C3%9Fn&stage =results
    test=wassd%C3%B6%7C%C3%A4%7C%C3%A4%7C%C3%9Fn&stage =results

    Wie man sieht kommem die UTF-8 Daten über die HTML Seite wieder richtig zurück in den Apache: $HTTP_RAW_POST_DATA.....
    Aber in php sin die Daten verfälscht.
    Bei GET Variablen ist die Sache genauso.
    Wo ist hier der Wurm drin?

    Ich hoffe ich bin verständlich.

  • #2
    Lösung

    Man muss scheinbar 2 Tage nach einem Geist suchen und hier posten. Schon findet man die Lösung selbst.
    Die Lösung steht da->PHP UTF-8 cheatsheet - nicknettleton.com
    Das hier war bei mir auf Japanisch gestellt:
    mbstring.language = Neutral ; Set default language to Neutral(UTF- (default)
    mbstring.internal_encoding = UTF-8 ; Set default internal encoding to UTF-8
    mbstring.encoding_translation = On ; HTTP input encoding translation is enabled
    mbstring.http_input = auto ; Set HTTP input character set dectection to auto
    mbstring.http_output = UTF-8 ; Set HTTP output encoding to UTF-8
    mbstring.detect_order = auto ; Set default character encoding detection order to auto
    mbstring.substitute_character = none ; Do not print invalid characters
    default_charset = UTF-8 ; Default character set for auto content type headerViel Erfolg noch.

    Kommentar

    Lädt...
    X