Zeichencodierung irgendwie falsch!

praktikant81

Mitglied
Hi Leute,

ich habe ein kleines Problem und zwar möchte ich eine zufällige Zeichenkette erzeugen! Dazu habe ich mir ein Script geschrieben

PHP:
$newpass = "";
	$string="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789äüöÄÜÖß!§$%&/()?";
	
	$string_len = strlen($string)-1;

	mt_srand((double)microtime()*1000000);
	echo $string.'<br />';
	for ($i=1; $i <= $laenge; $i++) {
		$test = mt_rand(0,$string_len);
		$buch = substr($string, $test, 1);
		echo $test. '  '.$buch.'<br />';
		$newpass .= $buch;
		//$newpass .= substr($string, mt_rand(0,$string_len), 1);
	}

und das kommt dann da z.B. raus!

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789äüöÄÜÖß!§$%&/()?
82 X
0 &
63 r
9 L
25 ?
33 d
44 ?
40 V
49 o
54 ?

Ich habe alles auf UTF-8 gestellt! Und ich weiß also nicht was ich noch machen kann, damit ich dieses ? los werde!
 
Zuletzt bearbeitet:
Habe dir ein php File erstellt. Dieses gibt immer eine Zeichenkette aus.

PHP:
<?php
/**
* Eine Zeichenkette erzeugen!
* @param type $_min_laenge
* @param type $_max_laenge
* @param type $_durchwirbn_n
* @return type STRING
*/
function Zeichenkette_erzeugen($_min_laenge=5, $_max_laenge=16, $_durchwirbn_n=3){
    $zeichen = array();
    $_reihen = array();
    array_push($_reihen, range('A' , 'Z'));//Alle Buchstaben A-Z
    array_push($_reihen, range('a' , 'z'));//Alle Buchstaben a-z
    array_push($_reihen, range(0 , 9));//Alle Zahlen 0-9
    array_push($_reihen, explode(',', 'ä,ü,ö,Ä,Ü,Ö,ß,!,§,$,%,&,/,(,),?'));//Alle gewünschten Sonderzeichen

    foreach($_reihen as $reihe)
            $zeichen = array_merge($zeichen, $reihe);
    for ($i = 0 ; $i < 2 ; $i++)
            shuffle($zeichen);

    $Zeichenkette = '';
    $laenge = rand($_min_laenge , $_max_laenge);
    for ($i = 0 ; $i < $laenge ; $i++)
            $Zeichenkette .= $zeichen[array_rand($zeichen , 1)];

    list($usec, $sec) = explode(" ", microtime());
    return $Zeichenkette;
}

?>
<!DOCTYPE html>
<html>
    <head>
        <meta content="text/html; charset=UTF-8">
        <title>Zeichenkette erzeugen</title>
    </head>
    <body>
    	<p>
        Zeichenkette: <?php echo Zeichenkette_erzeugen(5, 10, 3);?>
        </p>
    </body>
</html>

Für PW zu erzeugen gibt es noch eine andere Möglichkeit. Diese Passwörter sind lesbar ;)
PHP:
<?php

/**
 * Erstellt ein Passwort, welches lesbar ist
 * @param type $buchstaben
 * @param type $zahlen
 * @return type STRING 
 */
function passwort_erzeugen($buchstaben=0,$zahlen=0){
      $buchstaben = max(0,$buchstaben);
      $zahlen     = max(0,$zahlen);
      if(0 === $buchstaben && 0 === $zahlen)
      { // dann gib dem Zufall eine Chance
        $buchstaben = mt_rand(5,8); // anzahl Buchstaben
        $zahlen     = mt_rand(3,5); // anzahl Zahlen
      }
      $konsonanten ='wrtzpsdfghklyxcvbnm';
      $vokale='aeiou';
      $passwort = '';
      for ($i=0;$i<$buchstaben;$i++)
      {
        if (($i % 2)<1)
        {
          $p = mt_rand(0,strlen($konsonanten)-1);
          $bst = $konsonanten{$p};
          if(mt_rand(0,1)>0) $bst = strtoupper($bst);
          $passwort .= $bst;
        }else
        {
          $p = mt_rand(0,strlen($vokale)-1);
          $passwort .= $vokale{$p};
        }
      }
      for ($i=0;$i<$zahlen;$i++) $passwort .= mt_rand(1,9);
      return  $passwort;
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta content="text/html; charset=UTF-8">
        <title>Passwort erzeugen</title>
    </head>
    <body>
    	<p>
        Passwort: <?php echo passwort_erzeugen(6, 2);?>
        </p>
    </body>
</html>
 
Tausend Dank************
Hab es ausprobiert und es Funktioniert! Wie war es auch anders zu erwarten! ;-)

Aber jetzt noch mal zu meinem Verständis!
Woher kommen denn diese Fragezeichen?!
Denn die kommen ja auch nicht immer und es betreffen auch immer andere Buchstaben?
 
Zuletzt bearbeitet:
Kann es sein, dass dein HTML File nicht 100%ig ist?

Hast du ganz oben in der ersten Zeile den Doctype und das Meta-Tag UTF-8? z.B
HTML:
<!DOCTYPE html>
<html>
    <head>
<meta content="text/html; charset=UTF-8">
;)
 
Das steht bei mir in der esten Zeile drin!

HTML:
<!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" />

Was mich halt wundert, ist das ich wenn ich den ganzen String ausgeben es keine Probleme mit der Darstellung gibt!
Sobalt ich den aber den String bearbeite kommt bei den Buchstaben ÄÜÖäüö und ? so nen Fragezeichen!
 
Zuletzt bearbeitet:
Kann es sein, dass dein HTML File nicht 100%ig ist?

Hast du ganz oben in der ersten Zeile den Doctype und das Meta-Tag UTF-8? z.B
HTML:
<!DOCTYPE html>
<html>
    <head>
<meta content="text/html; charset=UTF-8">
;)
Für html5 ist das übrigens falsch.

So dann eher:
HTML:
<meta charset="utf-8" />

Gruß
 
Zuletzt bearbeitet:
Moin,

weil wir grad auf Arbeit auch mit dem Thema beschäftigt sind: PHP kann intern nicht mit UTF-8 umgehen. Funktionen wie strlen müssen abgeändert werden in mb_strlen.
Eine genauere Liste der zu ersetzenden Funktionen gibts unter: http://de.php.net/manual/de/mbstring.overload.php

Zusätzlich kann es sein, dass im PHP-Skript folgende Befehle abgesetzt werden müssen, weil der Server intern mit Latin1 arbeitet:
PHP:
header('Content-Type: text/html;charset=UTF-8');
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

In der .htaccess kann folgendes erforderlich sein:
Code:
AddDefaultCharset utf-8
AddCharset utf-8 .css .js .xml .json .rss .atom

Grüße
 
Zurück