3 Stimmen

Ersetzen von Akzenten durch ihre Entsprechungen

Aus irgendeinem Grund (es ist eine lange Geschichte) muss ich die Akzente durch ihre "normalen" Gegenstücke ersetzen.

Ich tue das:

$array = array(
            'ò' => 'o',
            'ó' => 'o',
            'à' => 'a',
            'è' => 'e',
            'é' => 'e',
            'ù' => 'u',
            );
return str_replace(array_keys($array), array_values($array), $string);

aber es funktioniert nicht (mit normalen Buchstaben funktioniert wie ein Charme) Ich denke, es ist ein Kodierungsproblem, gibt es einen anderen Weg, dies zu tun? Wie kann ich das beheben?

Gracias.

7voto

John Conde Punkte 212467

Desde URL-freundlicher Benutzername in PHP? und leicht modifiziert

function Slug($string)
{
    return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'))), ' '));
}

$user = 'Alix Axel';
echo Slug($user); // alix axel

$user = 'Álix Ãxel';
echo Slug($user); // alix axel

$user = 'Álix----_Ãxel!?!?';
echo Slug($user); // alix axel

1voto

Jonathan Kuhn Punkte 14959

strtr wird zur Übersetzung bestimmter Zeichen verwendet. Hier ist ein Beispiel aus den Kommentaren:

// php.net/strtr comment by: allixsenos at gmail dot com
function normalize ($string) {
    $table = array(
        'Š'=>'S', 'š'=>'s', ''=>'Dj', ''=>'dj', 'Ž'=>'Z', 'ž'=>'z', ''=>'C', ''=>'c', ''=>'C', ''=>'c',
        'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
        'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
        'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
        'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
        'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
        'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
        'ÿ'=>'y', ''=>'R', ''=>'r',
    );

    return strtr($string, $table);
}

Leider müssen Sie trotzdem alle Zeichenübersetzungen angeben. Den Kommentaren nach zu urteilen, scheint dies ziemlich vollständig zu sein.

1voto

softwarevamp Punkte 697

So einfach wie

preg_replace('/[^-\w]/', '', preg_replace('/\s+/', '-', iconv('UTF-8', 'ASCII//TRANSLIT', $s)))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X