PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] String mit Sonderzeichen zu [a-zA-Z] umwandeln


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