Mailinglisten-Archive |
hallo norbet und alle interessierten (stillen) mitleser... ;-) hab doch noch das "kleine" script geschrieben, welches eine UTF8 Datei einliesst und in html-entities umwandelt. schoene ist natuerlich, dass dem browser kein utf-8 zeichensatz mitgeteilt werden muss... hier ist es... achso.. eine kleine textdatei text.txt mit dem utf-8 daten sollte im gleichen verzeichnis liegen. das hier ist sehr nuetzlich...: http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt testausgaben habe ich erst mal auskommentiert. koennen aber das script etwas verstaendlicher machen... ;-) <?php $utf8 = file_get_contents("text.txt"); $entities = ''; // alle bytes durchlaufen for ($i=0; $i<strlen($utf8); $i++) { $byte = ord(substr($utf8,$i,1)); /* laenge des bytes bestimmen */ for ($length=6; $length>0; $length--) { $mask = pow(2,$length)-1; $mask = $mask << (8-$length); // echo "Maske: ".decbin($mask)."<br>"; if (($byte & $mask) == $mask) break; } /* evetl. fehlende bytes einlesen ($length-1) */ $addbytes = array(); for ($rest=$length-1;$rest>0;$rest--) { $i++; $addbytes[] = ord(substr($utf8,$i,1)); } $visible = $addbytes; foreach ($visible as $k => $v) $visible[$k] = decbin($visible[$k]); // echo "Laenge des UTF-8 Zeichens: $length, Zeichen: ". // decbin($byte). // " - ".implode(' - ',$visible)."<br>"; /* nun entfernen wir die prefixe fuers erste byte sind das $length+1 bits fuer alle anderen immer 2 bits */ $byte = $byte & (pow(2,(8-$length))-1); for ($j=0; $j<count($addbytes); $j++) $addbytes[$j] = $addbytes[$j] & pow(2,6)-1; $visible = $addbytes; foreach ($visible as $k => $v) $visible[$k] = decbin($visible[$k]); // echo "Entmaskierte Daten: ".decbin($byte)." - ". // implode(' - ',$visible)."<br>"; /* und nun alle bytes verknuepfen. dazu gehen wir vom ersten byte aus. verschieben das um 6bits nach links und machen einer oder verknuepfung mit dem 2. byte. mit dem resultat machen wir das gleiche, damit wir das dritte byte dranhaengen koennen, usw. */ $target = $byte; for ($j=0; $j<count($addbytes); $j++) { // echo "ausgangspunkt: ".decbin($target).", "; $target = $target << 6; // echo "nach shl 6: ".decbin($target).", "; $target = $target | $addbytes[$j]; // echo "nach or ".decbin($addbytes[$j]).": ". // decbin($target)."<br>"; } $entities .= "&#$target;"; // echo "<br>"; } echo $entities; ?> gruesse thomas
php::bar PHP Wiki - Listenarchive