php iconv translit zum Entfernen von Akzenten: funktioniert nicht wie freigestellt?

8

beachte diesen einfachen Code:

%Vor%

druckt

%Vor%

statt nur

%Vor%

Weißt du, was ich falsch mache?

Nach dem Hinzufügen von setlocale hat sich nichts geändert.

%Vor%     
dynamic 06.02.2011, 00:14
quelle

7 Antworten

9

Ich habe diese Standardfunktion, um gültige URL-Strings ohne die ungültigen URL-Zeichen zurückzugeben. Die Magie scheint in der Zeile nach dem // Entfernen von unerwünschten Zeichen zu stehen.

Dies ist aus der Symfony-Framework-Dokumentation entnommen: Ссылка , die wiederum genommen wird aus Ссылка aber ich spreche nicht Tschechisch ;-)

%Vor%     
Hidde 06.02.2011, 00:32
quelle
5

cf @tchrist, mit INTL php Erweiterung

Ссылка

%Vor%

eéèêëiîïoöôuùûüaâäÅ Ἥ ŐǟǠ ǺƶƈƉųŪŧȬƀ␢ĦŁȽŦ ƀǖ wird

eeeeeiiioouuuuaaaA Η OaA AƶƈƉuUŧOƀ␢ĦŁȽŦ ƀu

Wie Tchrist betont, werden nicht alle Unicode-Zeichen als zerlegbar angesehen:

Aus Unicode-Diagrammen extrahieren:

U0080.pdf

  

00CF Ï LATIN CAPITAL BRIEF I MIT DIAERESE

     

≡ 0049 I 0308 ¨

     

NB dieses Symbol «≡» weist auf eine verfügbare Zerlegung hin

     

00D0      

→ 00F0 ð lateinischer Kleinbuchstabe eth

     

→ 0110 Đ Lateinischer Großbuchstabe d mit Strich

     

→ 0189 Ɖ Lateinischer Großbuchstabe afrikanischer d

keine Zerlegung verfügbar, IMHO seltsam (wir könnten ASCII-Buchstaben D als akzeptables Äquivalent betrachten).

U0100.pdf

  

0110 Đ LATINISCHER GROSSBUCHSTABE D MIT SCHLAG

     

→ 00D0 - lateinischer Großbuchstabe eth

     

→ 0111 đ lateinischer Kleinbuchstabe d mit Strich

     

→ 0189 Ɖ Lateinischer Großbuchstabe afrikanischer d

noch seltsamer: Dieser ist als LATIN CAPITAL LETTER D (mit Strich) gekennzeichnet, aber nicht als solcher dekompositionierbar! Vielleicht sollte eine kühlere Lösung darin bestehen, die Unicode-Beschreibung jedes Char zu erhalten und sie mit der Beschreibung jedes ASCII-Charts zu vergleichen (und entsprechend zu ersetzen). Jemand? ; -]

cf Ссылка

    
eleg 08.08.2012 15:28
quelle
0

Wenn Sie Transliteration machen, müssen Sie sicherstellen, dass Ihr LC_COLLATE korrekt eingestellt ist, ansonsten wird das Standard-POSIX verwendet.

Schauen Sie sich Ссылка

an     
Michael Parkin 06.02.2011 00:22
quelle
0

Ich bin versucht, "nichts" zu sagen, obwohl das ein bisschen außerhalb meiner Expertise liegt. PHPs iconv () ist berüchtigt und die Inspiration für viele Problemumgehungen, einschließlich

  • wird auf das Symbol iconv des Systems gelöscht Dienstprogramm (Unix & amp; Linux)
  • Erstellen einer Nachschlagetabelle
  • ersetzt alle akzentuierten Zeichen mit einem ASCII-Äquivalent als Art von a Vorverarbeitungsstufe
  • Einstellung LC_COLLATE (was nicht scheinen für jeden zu funktionieren)
  • Verwenden Sie htmlentities () anstelle von iconv ()

Lesen Sie die Kommentare zur iconv () Dokumentation , um weitere Informationen zu erhalten. (Oder Mitgefühl. Zu nahe, um anzurufen.)

    
quelle
0

Es scheint, als wäre der Standard, dies zu handhaben, mit einer Funktion zum Entfernen von Akzenten, die Sie in Bibliotheken wie gedeihen oder CMS's mögen Wordpress . Iconv scheint nicht in der Lage zu sein, Akzente zu übersetzen (und dies zu Recht), da dies für nichts anderes als URL-Slugs eine gute Idee ist.

    
Xeoncross 28.10.2011 15:18
quelle
0

Es passiert bei mir mit pure iconv ohne php. Der Trick war, den Umgebungswert von LANG auf en_US.UTF-8 zu setzen (in meinem Fall war es hu_HU.UTF-8). Nachdem es wie erwartet funktioniert hat.

    
Stone 01.07.2013 13:22
quelle
0

Es scheint, dass es von der PHP-Version abhängt ...

Testfall # 1

%Vor%

PHP 7.0.0RC8 (cli) (gebaut: 25. November 2015 12:36:50) (NTS) Copyright (c) 1997-2015 Die PHP-Gruppe Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies     mit Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, von Zend Technologies

%Vor%

Testfall # 2

%Vor%

PHP 7.0.8-1 ~ dotdeb + 8.1 (kli) (NTS) Copyright (c) 1997-2016 Die PHP-Gruppe Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies     mit Zend OPcache v7.0.8-1 ~ dotdeb + 8.1, Copyright (c) 1999-2016, von Zend Technologies

%Vor%     
fred727 01.08.2016 22:44
quelle