Quelqu'un peut-il me fournir une fonction pour générer des slugs?

Dec 30 2020

Les fonctions que Wordpress utilise pour générer des slugs sont dispersées dans plusieurs fonctions et filtres. Je ne peux pas tous les trouver. Quelqu'un peut-il me fournir une seule fonction php pour générer des slugs? Je n'ai pas besoin de toutes les fonctionnalités de Wordpress, juste besoin d'encoder des caractères non latins et de supprimer les caractères illégaux qui ne sont pas autorisés dans l'url.

Cet article fournit une fonction, mais il ne peut pas gérer les caractères non latins.

Merci!

Réponses

1 TomJNowell Dec 30 2020 at 21:14

Cet article fournit une fonction, mais il ne peut pas gérer les caractères non latins.

C'est parce que les URL ne peuvent pas contenir de caractères non latins / ASCII.

Les navigateurs peuvent vous montrer des caractères non latins, mais ce n'est qu'une fonctionnalité d'interface utilisateur.

Par exemple, si vous visitez cette URL Wiktionnaire:, l'URL de https://en.wiktionary.org/wiki/わかもの#Japanesevotre navigateur code les caractères japonais pour obtenir l'URL réelle: https://en.wiktionary.org/wiki/%E3%82%8F%E3%81%8B%E3%82%82%E3%81%AE#Japanesepuis l'URL la décode lors de l'affichage de l'URL. La version avec les signes de pourcentage est la véritable URL.

De même pour tout autre code de caractère non ASCII, par exemple l'arabe. Si vous créez un message avec le slug わかものpuis enregistrez et vérifiez la base de données, vous ne verrez pas わかもの, vous verrez %e3%82%8f%e3%81%8b%e3%82%82%e3%81%ae. De même, l'interface utilisateur vous montrera les caractères japonais, mais si vous copiez le lien, vous obtenez la version encodée.

Si nous mettons ensuite à jour la base de données et changeons le slug du message en わかもの, le message ne peut plus être chargé, et nous obtenons un 404. C'est parce que le slug est invalide et il n'est pas possible de charger une URL qui correspond à ce slug.

oui, j'ai besoin que les caractères non latins soient encodés en% xx

Vous devez urlencodeluiecho urlencode( $slug )