Ich möchte eine Funktion zum Erstellen von Slugs aus Unicode-Strings haben, z . B. gen_slug('Andrés Cortez')
sollte zurückkehren andres-cortez
. Wie soll ich das machen
php
internationalization
slug
Andres SK
quelle
quelle
andres
. Sind Sie sicher, dass Ihre Eingabe genau "andrés" ist?Antworten:
Versuchen Sie statt eines längeren Austauschs Folgendes:
Dies basiert auf dem im Jobeet-Tutorial von Symfony.
quelle
^
direkt nach der öffnenden Klammer - es kehrt die Übereinstimmung um.iconv
wird nicht korrekt konvertiert, wenn$text
Zeichen enthalten, die kein ASCII-Äquivalent haben. Zum Beispieliconv('utf-8', 'us-ascii//TRANSLIT', "EFI收购Cretaprint")
wird zurückkehren"EFI"
und eine Warnung auslaufen.$text = trim($text, '-');
sollte am ende sein, sonstFoo 收
wirdfoo-
. AuchFoo 收 Bar
wirdfoo--bar
(das wiederholte-
scheint überflüssig).Aktualisieren
Da diese Antwort einige Aufmerksamkeit erhält, füge ich eine Erklärung hinzu.
Die bereitgestellte Lösung ersetzt im Wesentlichen alles außer AZ, az, 0-9 und - (Bindestrich) durch - (Bindestrich). Daher funktioniert es mit anderen Unicode-Zeichen (die gültige Zeichen für einen URL-Slug / String sind) nicht richtig. Ein häufiges Szenario ist, wenn die Eingabezeichenfolge nicht englische Zeichen enthält.
Verwenden Sie diese Lösung nur, wenn Sie sicher sind, dass die Eingabezeichenfolge keine Unicode-Zeichen enthält, die Sie möglicherweise als Teil von output / slug verwenden möchten.
Z.B. "नारी शक्ति" wird zu "----------" (alle Bindestriche) anstelle von "नारी-शक्ति" (gültiger URL-Slug).
Ursprüngliche Antwort
Wie wäre es mit...
?
quelle
strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', "Étienne")))
kehrt"-tienne"
statt zurück"etienne"
, daher funktioniert es nicht mit Zeichen mit Akzent.Wenn Sie die intl- Erweiterung installiert haben, können Sie mit der Funktion Transliterator :: transliterate auf einfache Weise einen Slug erstellen.
quelle
Hinweis: Ich habe dies aus WordPress genommen und es funktioniert !!
Verwenden Sie es so:
Code
quelle
sanitize_title_with_dashes($string, null, 'save')
(beachten Sie die zusätzlichen Parameter), sonst erhalten Sie einige unordentliche Zeichencodes wietelstra%e2%80%99s-%e2%80%98all-roles-flex%e2%80%99
. Nicht sehr hübsch. :-(sanitize
ist ein seltsamer, unvergesslicher Funktionsname, um einen Slug zu generieren.Es ist immer eine gute Idee, vorhandene Lösungen zu verwenden, die von vielen hochrangigen Entwicklern unterstützt werden. Das beliebteste ist https://github.com/cocur/slugify . Erstens unterstützt es mehr als eine Sprache und wird aktualisiert.
Wenn Sie nicht das gesamte Paket verwenden möchten, können Sie das benötigte Teil kopieren.
quelle
Hier ist ein anderer, zum Beispiel "Titel mit seltsamen Zeichen ééé AX Z" wird zu "Titel mit seltsamen Zeichen-eee-axz".
quelle
Eine aktualisierte Version des @ Imran Omar Bukhsh-Codes (aus dem neuesten Wordpress (4.0) -Zweig):
Online- Beispiel anzeigen .
quelle
%c2%abgq%c2%bb-elyas-mbarek-geh%c3%b6rt-zu-m%c3%a4nnern-des-jahres
quelle
Verwenden Sie hierfür nicht preg_replace. Es gibt eine PHP-Funktion, die nur für diese Aufgabe entwickelt wurde: strtr () http://php.net/manual/en/function.strtr.php
Entnommen aus den Kommentaren im obigen Link (und ich habe es selbst getestet; es funktioniert:
quelle
Ich benutze:
Der einzige Nachteil ist, dass kyrillische Zeichen nicht konvertiert werden, und ich suche jetzt nach einer Lösung, die nicht lange str_replace für jedes einzelne kyrillische Zeichen ist.
quelle
set_locale('cyrillic.UTF-8')
zuerst zu verwenden . Der genaue Wert hängt von Ihren installierten Gebietsschemas ab.Ich wusste nicht, welches ich verwenden sollte, also machte ich eine schnelle Bank auf phptester.net
Anfang :
Ausgabeergebnisse:
Weitere Tests erforderlich.
Bearbeiten: weniger Iterationstest
Anfang :
Ausgabeergebnisse:
quelle
Sie könnten einen Blick darauf werfen
Normalizer::normalize()
, siehe hier . Es muss nur das intl-Modul für PHP geladen werdenquelle
Was ist mit etwas, das bereits in Core implementiert ist?
Oder eine der wichtigsten Methoden zum Umschreiben von URLs.
quelle
Da gTLDs und IDNs immer häufiger verwendet werden, kann ich nicht verstehen, warum URLs Andrés nicht enthalten sollten.
Nur rawurlencode $ URL, die Sie stattdessen möchten. Die meisten Browser zeigen UTF-8-Zeichen in URLs an (möglicherweise nicht in einem alten IE6), und bit.ly / goo.gl kann verwendet werden, um es in Fällen wie Russisch und Arabisch kurz zu machen, wenn dies für Werbezwecke erforderlich ist, oder sie einfach in Anzeigen zu schreiben wie Benutzer würde sie auf Browser-URL schreiben.
Der einzige Unterschied besteht darin, dass Leerzeichen "" eine gute Idee sind, sie durch "-" und "/" zu ersetzen, wenn Sie diese nicht zulassen möchten.
URL wie codiert http://www.hurtta.com/RU/%D0%9F%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B/
URL wie geschrieben http://www.hurtta.com/RU/Продукты/
quelle
Ich habe dies basierend auf Maerlyns Antwort geschrieben. Diese Funktion funktioniert unabhängig von der Zeichencodierung auf der Seite. Es werden auch keine einfachen Anführungszeichen in Bindestriche umgewandelt :)
quelle
auf meinem localhost war alles in ordnung, aber auf dem server half es mir "set_locale" und "utf-8" bei "mb_strtolower".
quelle
Die eleganteste Art, die ich denke, ist die Verwendung eines Behat \ Transliterator \ Transliterator.
Ich muss diese Klasse um Ihre Klasse erweitern, da es sich um eine Zusammenfassung handelt, einige davon wie folgt:
Und dann benutze es einfach:
Natürlich sollten Sie diese Dinge auch in Ihren Komponisten einbauen.
Weitere Informationen finden Sie hier https://github.com/Behat/Transliterator
quelle
Hier gibt es eine gute Lösung , die sich auch mit Sonderzeichen befasst.
Texto Fantástico => texto-fantasto
Verfasser: Natxet
quelle
Dies kann auch ein Weg sein, dies zu tun. Inspiriert von diesen Links Expertenaustausch und Alinalexander
quelle
Da ich hier viele Methoden gesehen habe, aber eine einfachste Methode für mich gefunden habe. Vielleicht hilft sie jemandem.
quelle
Für mich ist diese Variante perfekt, auch sie ändert sich
&
zuand
. Hier ist Code:quelle