kostenloser Webspace werbefrei: lima-city


Irgendetwas konvertiert ISO automatisch zu UTF-8...

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    Hallo,

    ich habe eine kleines script für den SMS- Versand aufgebaut. In dessen darf aber kein UTF-8 drin vorkommen. Allerdings egal was ich probiere, immer wenn es ein Umlaut "ä,ü,ö" gibt, wird mir als Zeichensatz UTF-8 angezeigt. Obwohl ich den header auf Iso-8859-1 gesetzt habe.. Verstehe das nicht so ganz :(

    header('content-type text/html charset=iso-8859-1'); //ISO für sms versand

    [...]
    //Sollte ISO-8859-1 sein...
    setlocale(LC_ALL, 'de_DE');
    echo mb_detect_encoding($text);
    echo $text;



    Ganzer Code:
    header('content-type text/html charset=iso-8859-1'); //ISO für sms versand
    			include 'config.php';
    
    			//Nummer holen
    			$telefon = $_GET['number'];
    			
    			//Nummer auf erlaubte Zeichen prüfen
    			if (!preg_match("#^[0-9]{0,}[-/]{0,1}[+/]{0,1}[0-9]{0,}$#",$telefon))  {
        			echo "Falsche Eingabe<br>";
        			exit;		
    			}
    			//Nummer auf länge prüfen
    			if(strlen($telefon) > 14){
                 	echo 'Dein Nachrichten Text ist zu lang!';
                 	exit;
                 }
    	
                //Null suchen und ersetzen
                $suchmuster[0] = "/^0+/"; 
                $ersetzungen[0] = "+49"; 
                $telefon = preg_replace($suchmuster, $ersetzungen, $telefon); 
    			 echo $telefon;
    			 echo '<br>';
               
    			//Nachrichtentext auf Sonderzeichen prüfen und diese filtern wenn mq on ist
                if(get_magic_quotes_gpc() == 1){
                 $text = stripslashes($_GET['text']);
                 }
                else {
                //Oder nur Nachrichtentext ausgeben
                 $text = $_GET['text'];
                }
                
                //Nachrichtentext darf nur max. 160 Zeichen haben 
                 if(strlen($text) > 160){
                 	echo 'Dein Nachrichten Text ist zu lang!';
                 	exit;
                 }
                 
                 //Sollte ISO-8859-1 sein...
                 setlocale(LC_ALL, 'de_DE');
                 echo mb_detect_encoding($text);
                 echo $text;
    
    
    $urlvar["to"] = $telefon;		//Absender ist die geprüfte Nummer
    $urlvar["message"] = $text;		//Nachricht ist die geprüfte Nachricht
    
    foreach($urlvar as $key=>$val) //Jede Variable als schlüssel durchlaufen und die url zusammensetzen inclusive das "&" für die Variablen- Trennung
    { 
      $antwort.= $key."=".urlencode($val);
      $antwort.= "&";
    }
    
    $antwort = @file($url."?".$antwort); //Antwort erhalten und erkennen
    
    $antwort_code = intval($antwort[0]);
    
    $antwort_code_arr[10] = "Empfängernummer nicht korrekt"; 
    $antwort_code_arr[20] = "Absenderkennung nicht korrekt"; 
    $antwort_code_arr[30] = "Nachrichtentext nicht korrekt"; 
    $antwort_code_arr[31] = "Messagetyp nicht korrekt"; 
    $antwort_code_arr[40] = "SMS Route nicht korrekt"; 
    $antwort_code_arr[50] = "Identifikation fehlgeschlagen"; 
    $antwort_code_arr[60] = "nicht genügend Guthaben"; 
    $antwort_code_arr[70] = "Netz wird nicht abgedeckt"; 
    $antwort_code_arr[71] = "Feature nicht möglich"; 
    $antwort_code_arr[80] = "Übergabe an SMS-C fehlgeschlagen"; 
    $antwort_code_arr[100] = "SMS wurde angenommen und versendet"; 
    
    echo $antwort_code_arr[$antwort_code]; //Antwort ausgeben
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    header('content-type text/html charset=iso-8859-1'); //ISO für sms versand
    Du hast hier einen Doppelpunkt und einen Strichpunkt vergessen... so sollte es aussehen:
    header('content-type: text/html; charset=iso-8859-1'); //ISO für sms versand
    Das sagt übrigens nur dem Browser, dass das dieser Zeichensatz sein soll. Wenn du jetzt aber UTF-8 ausgeben solltest werden Sonderzeichen als 2 komische Zeichen angezeigt...
  4. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    hackyourlife schrieb:
    Du hast hier einen Doppelpunkt und einen Strichpunkt vergessen... so sollte es aussehen:
    header('content-type: text/html; charset=iso-8859-1'); //ISO für sms versand
    Das sagt übrigens nur dem Browser, dass das dieser Zeichensatz sein soll. Wenn du jetzt aber UTF-8 ausgeben solltest werden Sonderzeichen als 2 komische Zeichen angezeigt...


    Ja die Striche ok.. War nur leider nicht der Fehler..
    Auch
    mb_convert_encoding($text,'ISO-8859-1');
    gibt mir als Charset dann UTF-8 aus... :/

    Beitrag zuletzt geändert: 4.9.2012 10:38:46 von kill-a-teddy
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    Auch
    mb_convert_encoding($text,'ISO-8859-1');
    gibt mir als Charset dann UTF-8 aus... :/
    Also bei einem Sonderzeichen wie äöü o.ä. jeweils 2 kryptische Zeichen?

    Was passiert, wenn du es so versuchst?
    echo(utf8_decode($text));
  6. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    hackyourlife schrieb:
    kill-a-teddy schrieb:
    Auch
    mb_convert_encoding($text,'ISO-8859-1');
    gibt mir als Charset dann UTF-8 aus... :/
    Also bei einem Sonderzeichen wie äöü o.ä. jeweils 2 kryptische Zeichen?

    Was passiert, wenn du es so versuchst?
    echo(utf8_decode($text));


    Dann steht da noch immer UTF-8 und die Sonderzeichen / Umlaute werden nicht mehr angezeigt also Ä Ü Ö gibts net mehr :/
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    hackyourlife schrieb:
    kill-a-teddy schrieb:
    Auch
    mb_convert_encoding($text,'ISO-8859-1');
    gibt mir als Charset dann UTF-8 aus... :/
    Was passiert, wenn du es so versuchst?
    echo(utf8_decode($text));
    Dann steht da noch immer UTF-8 und die Sonderzeichen / Umlaute werden nicht mehr angezeigt also Ä Ü Ö gibts net mehr :/
    Was ist der aktuelle gesamte Code mit den Veränderungen?
    Woher kommen die Daten (Formular-Seite)?
    Kann man das wo live bewundern?
  8. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    hackyourlife schrieb:
    Was ist der aktuelle gesamte Code mit den Veränderungen?
    Woher kommen die Daten (Formular-Seite)?
    Kann man das wo live bewundern?


    Ich habe lediglich deine Codezeile hinzugefügt...
    Die Daten kommen von einer Formular- Seite... (Werde ich morgen früh mal als Archiv hochladen)
    Derzeit nicht, ist alles localhost basiert.
  9. hast Du vielleicht im Code noch sowas drin ?

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


    wenn ja, auch das noch ändern zu

    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />


    und vielleicht hilft ja sowas:

    <?php 
    header('content-type: text/html; charset=iso-8859-1');
    
    // ---- hier das Formular .... 
    
    echo '
    <form name="form1" method="GET" action="">
      Bitte Text eingeben: 
      <br>
      <textarea name="text" cols="40" rows="6" wrap="VIRTUAL"></textarea>
      <br>
      Absenden: <input type="submit" name="run" value="OK" />
    </form>
    '; 
    
    // ------- Text aus Formular-Eingabe ------ 
    if (!empty($_GET['text'])) { 
    
    $text = $_GET['text'];
    
    echo "<br />Vorher: <br />\n<pre>\n".$text."\n</pre>\n"; 
    
    // ------ Wenn $text UFT-8 ist, dann: utf8_decode() anwenden ------ 
      if (mb_detect_encoding($text, 'UTF-8', true) === TRUE) {
        $text = utf8_decode($text);
      }
    
    echo "<br />Nachher: <br />\n<pre>\n".$text."\n</pre>\n"; 
    
    }
    
    ?>


  10. Nicht elegant, dafür funktionierts:

    $message = str_replace("ä", "ä", $message);
    $message = str_replace("ü", "ü", $message);
    $message = str_replace("Ä", "Ä", $message);
    $message = str_replace("ö", "ö", $message);
    $message = str_replace("Ö", "Ö", $message);
    $message = str_replace("ß", "ß", $message);
    $message = str_replace("Ãœ", "Ü", $message);
    $message = str_replace('\"', '"', $message);


    $message durch $text ersetzen
  11. t*****b

    Wichtig ist:

    1. Die Datei muss wirklich als UTF-8 gespeichert sein. Einfach mal mit nem Editor öffnen, die datei in UTF-8 umwandeln und wieder speichern.Ggf. alle dann "kaputten" Umlaute erneut eintippen.

    2. Der Browser sollte mitbekommen, um welche Codierung es sich handelt, damit er auch den richtigen Zeichensatz verwenden kann. Das kann bzw. sollte man über verschiedene Möglichkeiten machen:

    2.1 Über den HTTP-Header:

    <?php header('content-type: text/html; charset=utf-8'); ?>


    2.2 Über Metatag

    Das hat aber den Nachteil, dass das Dokument schon geladen wurde, bevor es umgeandelt wird (bzw. wenns stimmt dann nicht). Dabei können Probleme entstehen. Der Vorteil ist, dass auch Eingaben von Benutzer dann bereits bei der Eingabe UTF-8 sind soweit ich weiß, sollte dann in dieser Hinsicht also keine Probleme mehr geben.

    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">


    3. Die Datenbank bzw. andere Dateien bzw. dynamischer Content

    Alle Daten, die dynamisch geladen werden, sollten auch in UTF-8 vorhanden sein. Es macht kein Sinn, eine ISO-8859-1 in eine UTF-8-Datei zu includieren. Genauso bei Datenbank Aus- und Eingaben(!). Wenn man ISO eingibt, aber UTF-8 speichert oder Ausgibt kann es auch Probleme geben.

    Wenn man sich daran hält, dürfte es keine Probleme geben.
  12. Ich weiß ja nicht welche Frage trueweb beantworten wollte (er hat ja gesagt, es muss in ISO sein, das wird schon seinen Grund haben), aber es könnte natürlich an deinem Editor liegen. Als letztes könnte ich mir noch vorstellen, dass du in der htaccess den Zeichensatz auf uft-8 gesetzt hast. Wenn du die Developer Tools von Chrome öffnest, was steht da in den headern drinnen?

    MfG
    Dominic
  13. 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!