Captain America
2005-10-28, 18:19:45
Hi there, brauche eine PHP Funktion, bei der ich als Kollation ASCII angeben kann, damit ich Strings wie folgt umwandeln kann:
$var = "Fräulein Moßé";
$var2 = umwandeln_mit_kollation($var, "ASCII");
echo($var); // Ausgabe: Fräulein Moßé
echo($var2); // Ausgabe: Fraeulein Mosse
Der erste der mir hilft bekommt... meine ewige Dankbarkeit oder sowas! :D
Sephiroth
2005-10-28, 18:30:18
http://de2.php.net/manual/de/function.utf8-decode.php#52656 :rolleyes:
Captain America
2005-10-28, 18:30:41
Thx an Sephirot! Er hat mir im IRC geantwortet. (y) es ist natürlich iconv().
edit: und noch mal im thread X-D
Captain America
2005-10-28, 20:35:34
PHP Notice: iconv() [<a href='function.iconv'>function.iconv</a>]: Detected an illegal character in input string in [Datei:Zeile] :usad:
Captain America
2005-10-29, 07:49:11
http://www..php.net/manual/en/function.iconv.php
Auf der englischen Manpage sind mehr Informationen zu finden als auf der deutschen Übersetzung!
If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can't be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.
:mad:
Translit macht aber auch nicht das was ich wollte. mb_convert_encoding() wäre eine Alternative, setzt aber ein Fragezeichen ein, bei unverfügbaren Buchstaben. recode_string() einer weitere, kann aber nicht coexistieren mit MySQL oder IMAP.
$var = "Fräulein Moßé";
$var_iconv = iconv(iconv_get_encoding("internal_encoding"), "ASCII//TRANSLIT", $var);
$var_mbstring = mbstring_convert_encoding($var, "ASCII");
echo($var); // Ausgabe: Fräulein Moßé
echo($var_iconv); // Ausgabe: Fr"aulein Moss'e
echo($var_mbstring); // Ausgabe: Fr?lein Mo??
Bleibt nur eine einfache Funktion zu schreiben, die nach Best Effort versucht, eine entsprechung einzusetzen:
function &recode_az($str)
{
$replacements = array(
chr(192) => 'A',
chr(193) => 'A',
chr(194) => 'A',
chr(195) => 'A',
chr(196) => 'AE',
chr(197) => 'A',
chr(198) => 'AE',
chr(199) => 'C',
chr(200) => 'E',
chr(201) => 'E',
chr(202) => 'E',
chr(203) => 'E',
chr(204) => 'I',
chr(205) => 'I',
chr(206) => 'I',
chr(207) => 'I',
chr(208) => 'D',
chr(209) => 'N',
chr(210) => 'O',
chr(211) => 'O',
chr(212) => 'O',
chr(213) => 'O',
chr(214) => 'OE',
chr(216) => 'O',
chr(217) => 'U',
chr(218) => 'U',
chr(219) => 'U',
chr(220) => 'UE',
chr(221) => 'Y',
chr(222) => 'P',
chr(223) => 'ss',
chr(224) => 'a',
chr(225) => 'a',
chr(226) => 'a',
chr(227) => 'a',
chr(228) => 'ae',
chr(229) => 'a',
chr(230) => 'ae',
chr(231) => 'c',
chr(232) => 'e',
chr(233) => 'e',
chr(234) => 'e',
chr(235) => 'e',
chr(236) => 'i',
chr(237) => 'i',
chr(238) => 'i',
chr(239) => 'i',
chr(240) => 'd',
chr(241) => 'n',
chr(242) => 'o',
chr(243) => 'o',
chr(244) => 'o',
chr(245) => 'o',
chr(246) => 'oe',
chr(248) => 'o',
chr(249) => 'u',
chr(250) => 'u',
chr(251) => 'u',
chr(252) => 'ue',
chr(253) => 'y',
chr(254) => 'p',
chr(255) => 'y'
);
$result = "";
for($i = 0; $i < strlen($str); $i++)
{
$char = substr($str, $i, 1);
if(array_key_exists($char, $replacements))
{
$char = $replacements[$char];
}
$result .= $char;
}
return $result;
}
$var = "Fräulein Moßé";
$var_recode_az = recode_az($str)
echo($var); // Ausgabe: Fräulein Moßé
echo($var_recode_az); // Ausgabe: Fraeulein Mosse
Wer eine bessere Lösung hat, immer her damit! Vielleicht gibt es ja ein Encoding in iconv(), das genau das macht, was ich suche.
P2oldi
2005-10-29, 13:53:19
moin Cap :)
da du ja nur alle Umlaute und das ß ersetzen willst, versuchs mal damit:
function SpecChar($text) {
$ltochange=array("Ü","Ö","Ä","ä","ü","ö","ß","é","á","ó","ú","í","è","à","ò","ù","ì");
$lchangeto=array("Ue","Oe","Ae","ae","ue","oe","ss","e","a","o","u","i","e","a","o","u","i");
$text = str_replace($ltochange,$lchangeto,$text);
return $text;
}
Gruß P2
grade gesehen das auch é und sowas mit reinmuß, aber das Austauscharray anzupassen ist ja net so das Problem ^^
hab die Accents aus Langeweile schonmal eingebaut :D
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.