php iconv translit für das entfernen von Akzenten: nicht so funktioniert, wie unter VORBEHALT?
betrachten Sie diese einfachen code:
echo iconv('UTF-8', 'ASCII//TRANSLIT', 'è');
druckt es
`e
statt nur
e
weißt du, was ich falsch mache?
nichts geändert, nach dem hinzufügen von setlocale
setlocale(LC_COLLATE, 'en_US.utf8');
echo iconv('UTF-8', 'ASCII//TRANSLIT', 'è');
- Erste, dies ist eine von Grund auf böse und falsche Sache zu tun zu wollen. Zweitens, der einzig vernünftige Ansatz ist, um dazu führen, dass Ihr code in Unicode Normalization Form D gebildet durch die kanonische ZERLEGUNG und entfernen Sie diejenigen, die code-Punkte mit der Marke-Eigenschaft. Es wird nicht "fix" alles, natürlich: Tschüß
- Ignorieren tchris, ist dies DER Weg, es zu tun, ich benutze es in der Praxis. Der einzige Fehler, den Sie gemacht ist, dass die locale-Angabe "Unterklasse" ist
setlocale(LC_CTYPE, 'en_US.UTF-8');
-> LC_TYPE, nicht _COLLATE. Tschüss. - Ich habe das gleiche problem - es ist sicherlich nicht LC_TYPE... das erzeugt einen Fehler (für mich zumindest). Ich habe versucht LC_ALL (das ist das, was jeder andere auch sagt) - keine Wirkung. Ich Stelle in der Zeichenfolge
CŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ
und immerCSOEZsoez"Yyenu
A 'A^A~A"AAAECE'E^E"E
I ' I^I"ID~NO'O^O~O"OO
U 'U^U"U'Yssa'a^a~a"aaaec
e 'E^e"ei'i^i"id~n
o' o^o~o"oou'u^u"u'y"y
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich diese standard-Funktion zurückkehren gültige url-Zeichenfolgen ohne die ungültige url-Zeichen. Die Magie scheint in der Zeile nach dem //entfernen der unerwünschten Zeichen Kommentar.
Aus der Symfony-framework-Dokumentation: http://www.symfony-project.org/jobeet/1_4/Doctrine/en/08 die wiederum stammt aus http://php.vrana.cz/vytvoreni-pratelskeho-url.php aber ich spreche nicht Tschechisch 😉
[^\pL\d]
?plƒtre francin
string, wof
nicht umgewandelt zu bekommen?cf @tchrist, mit der INTL php-extension
http://fr2.php.net/manual/en/book.intl.php
eéèêëiîïoöôuùûüaâäÅ Ἥ ŐǟǠ ǺƶƈƉųŪŧȬƀ␢ĦŁȽŦ ƀǖ wird
eeeeeiiiooouuuuaaaA Η OaA AƶƈƉuUŧOƀ␢ĦŁȽŦ ƀu
Als tchrist betont, nicht alle unicode-Zeichen werden als verfeinerbare:
Auszug aus Unicode-charts:
U0080.pdf
keine Zersetzung verfügbar sind, IMHO seltsam (wir könnten ASCII-Buchstaben " D " als akzeptables äquivalent).
U0100.pdf
sogar noch seltsamer: diese ist gekennzeichnet als " LATIN CAPITAL LETTER D (mit Anschlag), aber nicht verrottbare als solche! Vielleicht ein Kühler Lösung sein sollte, um die unicode-Beschreibung von jedem char, und vergleichen Sie es mit der Beschreibung der einzelnen ascii-char (und entsprechend ersetzen). Wer? ;-]
cf http://unicode.org/Public/UNIDATA/UnicodeData.txt
Er mit mir passiert mit pure iconv ohne php. Der Trick war es, für LANG-Umgebung Wert auf de_de.UTF-8 (es war hu_HU.UTF-8 vor, wie in meinem Fall). Nachdem es funktionierte, wie erwartet.
Wenn dabei transliteration, müssen Sie sicherstellen, dass Ihre LC_COLLATE korrekt gesetzt ist, ansonsten wird der default-POSIX verwendet werden.
Blick auf http://uk3.php.net/manual/en/function.setlocale.php
Ich bin versucht zu sagen "nichts", das ist zwar ein wenig außerhalb meiner Kompetenz. PHP iconv() ist berühmt-berüchtigt, und die inspiration für die vielen workarounds, einschließlich
Dienstprogramm (Unix & Linux)
mit einem ASCII-äquivalent als eine Art
preprocessing-Phase
scheint zu funktionieren für alle)
Lesen Sie die Kommentare für iconv () - Dokumentation für mehr inspiration. (Oder Mitgefühl. Zu nahe zu nennen.)
Es scheint der standard-Weg, dies zu behandeln, ist mit einem "entfernen Akzente" - Funktion, die Sie finden in der Bibliothek wie gedeihen oder CMS wie WordPress. Iconv scheint unfähig zu sein, zu übersetzen Akzente (und zu Recht), da dies ist nicht eine gute Idee für etwas anderes als die URL-slugs.
Scheint es, dass es ab der php-version...
TestCase #1
PHP 7.0.0RC8 (cli) (built: Feb 25 2015 12:36:50) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
mit Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
TestCase #2
PHP-7.0.8-1~dotdeb+8.1 (cli) ( NTS )
Copyright (c) 1997-2016 Der PHP Group
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, die von Zend Technologies