I strtr
is multi-byte safe glauben, so oder so, da str_replace
ist multibytesicher Sie könnte es wickeln:
function mb_strtr($str, $from, $to)
{
return str_replace(mb_str_split($from), mb_str_split($to), $str);
}
Da es keine mb_str_split
Funktion gibt, müssen Sie auch Ihre eigene schreiben (mit mb_substr
und mb_strlen
), oder Sie könnten nur die PHP UTF-8 Implementierung verwenden (leicht verändert):
function mb_str_split($str) {
return preg_split('~~u', $str, null, PREG_SPLIT_NO_EMPTY);;
}
Allerdings, wenn Sie für eine Funktion sind alle auf der Suche (latein) Akzentuierungen aus einer Zeichenfolge entfernen Sie den folgenden finden könnten? Funktion nützlich:
function Unaccent($string)
{
return preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'));
}
echo Unaccent('ľľščťžýáíŕďňä'); // llsctzyairdna
echo Unaccent('Iñtërnâtiônàlizætiøn'); // Internationalizaetion
Könnten Sie vielleicht ein Beispiel für das, was Sie versuchen, genau das zu tun (Codebeispiel?)? Es wäre einfacher, eine Alternative für einen bestimmten Anwendungsfall vorzuschlagen. – Max
Ich habe kein genaues Beispiel zur Hand, aber es ist immer einen Blick auf die Benutzerkommentare auf der PHP-Dokumentationsseite zu werfen: http://us3.php.net/strtr Es scheint, dass es Leute gibt, die bereits das gleiche Problem hatten . Vielleicht hat einer von ihnen die Lösung bereits dort gepostet. – Max
Ja, Max, du hast Recht. Ich suchte nach einer Lösung, aber ich fand nichts. – Martin