• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Zeichen anhand unicode hexadezimal-code ersetzen?

bonimo

Neues Mitglied
Hallo,

ich suche eine ähnlich funktion wie str_replace die aber anhand vom unicode hexadeziamal-code ein zeichen ersetzen kann.

Ich möchte Beispielsweise Zeichen "00100" von

Unicode Characters: 00100 to 001FF

durch ein normales "A" ersetzen oder ein geschütztes Leerzeichen "00A0" durch ein "normales Leerzeichen"

Wie stelle ich das mit PHP am besten an?
 
Kurze Rückfrage: Möchtest du einige wenige Zeichen auf diese Weise ersetzen, oder möchtest du potentiell jedes Zeichen, das irgendeine Art von Repräsentation in "ASCII" (in Ermangelung eines besseren Ausdrucks ;)) hat, umwandeln? Also, würde es reichen, ein paar Mappings von Hand einzutragen oder ist eine allgemeine Lösung gesucht?
 
Also im Prinzip möchte ich alle Zeichen die lateinischen Buchstaben und Zahlen a-z 0-9 ähneln durch diese ersetzen sodass beispielsweise aus CITROËN -> CITROEN, CITRÖN o.ä. wird
 
Ja, müsste.

Hängt vielleicht noch etwas von der Eingabekodierung ab, aber generell wüsste ich die folgenden Möglichkeiten:

((2) und (3) sind in der dargestellten Form wahrscheinlich nur auf Buchstaben bezogen. Die beste Lösung ist sicherlich iconv. Würde mich mit den anderen nur befassen, falls iconv aus irgendeinem Grund nicht geht.)

(1) iconv, wobei die Locale-Geschichte im Zweifel systemabhängig ist.

- PHP: iconv - Manual

PHP:
$test = implode('', array('á','à','â','ã','ª','ä','å','Á','À','Â','Ã','Ä','é',
'è', 'ê','ë','É','È','Ê','Ë','í','ì','î','ï','Í','Ì','Î','Ï','œ','ò','ó','ô',
'õ','º','ø','Ø','Ó','Ò','Ô','Õ','ú','ù','û','Ú','Ù','Û','ç','Ç','Ñ','ñ'));

setlocale(LC_ALL, 'en_US.utf8');

echo iconv("UTF-8", "ASCII//TRANSLIT", $test);
// aaaa?aaAAAAAeeeeEEEEiiiiIIIIoeoooo???OOOOuuuUUUcCNn

(2) Dann gibt es noch das PECL intl Package. (Habe nie nachgeforscht, ob das auf normalem Webspace problemlos installierbar ist.)

- PHP: intl - Manual

PHP:
header('Content-Type: text/plain; charset=utf-8');

$test = implode('', array('á','à','â','ã','ª','ä','å','Á','À','Â','Ã','Ä','é','è',
'ê','ë','É','È','Ê','Ë','í','ì','î','ï','Í','Ì','Î','Ï','œ','ò','ó','ô','õ','º','ø',
'Ø','Ó','Ò','Ô','Õ','ú','ù','û','Ú','Ù','Û','ç','Ç','Ñ','ñ'));

$test = Normalizer::normalize($test, Normalizer::FORM_D);

// Remove everything that's not a "letter" or a space (e.g. diacritics)
// (see http://de2.php.net/manual/en/regexp.reference.unicode.php)
$pattern = '/[^\pL ]/u';

echo preg_replace($pattern, '', $test);
// aaaaªaaAAAAAeeeeEEEEiiiiIIIIœooooºøØOOOOuuuUUUcCNn

It's possible to remove diacritics using Unicode normalization form D (NFD) and Unicode character properties.

NFD converts something like the "ü" umlaut from "LATIN SMALL LETTER U WITH DIAERESIS" (which is a letter) to "LATIN SMALL LETTER U" (letter) and "COMBINING DIAERESIS" (not a letter).

(3) Die NFD-Geschichte habe ich selbst mal programmiert. (Wohl weniger interessant, aber hey.)

- trunk/php/utf8normalizer - dockyard - Project Hosting on Google Code

Ausgabe:
Code:
// aaaaaaaAAAAAeeeeEEEEiiiiIIIIœ oooooøØOOOOuuuUUUcCNn
 
Zuletzt bearbeitet:
Wow, genau so eine Funktion hab ich gesucht, funktioniert nach anfänglichen Problemen echt gut!

Thx für eure Hilfe :D
 
Zurück
Oben