Quiero tener una función para crear slugs a partir de cadenas Unicode, por ejemplo, gen_slug('Andrés Cortez')
debería volver andres-cortez
. ¿Cómo debo hacer eso?
php
internationalization
slug
Andres SK
fuente
fuente
andres
. ¿Estás seguro de que tu entrada es exactamente "andrés"?Respuestas:
En lugar de un reemplazo prolongado, prueba este:
Esto se basó en el tutorial de Jobeet de Symfony.
fuente
^
justo después del soporte de apertura, invierte el partido.iconv
no se convertirá correctamente si$text
contiene caracteres que no tienen un equivalente ASCII. Por ejemploiconv('utf-8', 'us-ascii//TRANSLIT', "EFI收购Cretaprint")
, volverá"EFI"
y perderá una advertencia.$text = trim($text, '-');
debe estar al final, de lo contrario seFoo 收
conviertefoo-
. Además, seFoo 收 Bar
conviertefoo--bar
(lo repetido-
parece redundante).Actualizar
Como esta respuesta está recibiendo algo de atención, estoy agregando alguna explicación.
La solución provista esencialmente reemplazará todo excepto AZ, az, 0-9, y - (guión) con - (guión). Por lo tanto, no funcionará correctamente con otros caracteres Unicode (que son caracteres válidos para una URL slug / string). Un escenario común es cuando la cadena de entrada contiene caracteres que no están en inglés.
Solo use esta solución si está seguro de que la cadena de entrada no tendrá caracteres Unicode que tal vez quiera formar parte de la salida / babosa.
P.ej. "नारी शक्ति" se convertirá en "----------" (todos los guiones) en lugar de "नारी-शक्ति" (slug de URL válido).
Respuesta original
Qué tal si...
?
fuente
strtolower(trim(preg_replace('/[^A-Za-z0-9-]+/', '-', "Étienne")))
devuelve en"-tienne"
lugar de"etienne"
, por lo que no funciona con caracteres acentuados.Si usted tiene instalada la extensión intl , puede usar la función Transliterator :: transliterate para crear una babosa fácilmente.
fuente
Nota: ¡He tomado esto de WordPress y funciona!
Úselo así:
Código
fuente
sanitize_title_with_dashes($string, null, 'save')
(tenga en cuenta los parámetros adicionales), de lo contrario obtendrá algunos códigos de caracteres desordenados comotelstra%e2%80%99s-%e2%80%98all-roles-flex%e2%80%99
. No muy bonita :-(sanitize
es un nombre de función extraño y olvidable para generar una babosa.Siempre es una buena idea utilizar soluciones existentes que cuentan con el respaldo de muchos desarrolladores de alto nivel. El más popular es https://github.com/cocur/slugify . En primer lugar, admite más de un idioma y se está actualizando.
Si no desea utilizar el paquete completo, puede copiar la parte que necesita.
fuente
Aquí hay otro, por ejemplo "Título con caracteres extraños ééé AX Z" se convierte en "título con caracteres extraños-eee-axz".
fuente
Una versión actualizada del código @Imran Omar Bukhsh (de la última rama de Wordpress (4.0)):
Ver ejemplo en línea .
fuente
%c2%abgq%c2%bb-elyas-mbarek-geh%c3%b6rt-zu-m%c3%a4nnern-des-jahres
fuente
No use preg_replace para esto. Hay una función php creada solo para la tarea: strtr () http://php.net/manual/en/function.strtr.php
Tomado de los comentarios en el enlace anterior (y lo probé yo mismo; funciona:
fuente
Estoy usando:
El único inconveniente es que los caracteres cirílicos no se convertirán, y ahora estoy buscando una solución que no sea larga para reemplazar cada carácter cirílico.
fuente
set_locale('cyrillic.UTF-8')
primero. El valor exacto depende de las configuraciones regionales instaladas.No sabía cuál usar, así que hice un banco rápido en phptester.net
Comenzando :
Resultados de salida:
Se necesitan más pruebas.
Editar: prueba de menos iteraciones
Comenzando :
Resultados de salida:
fuente
Puedes echar un vistazo
Normalizer::normalize()
, mira aquí . Solo necesita cargar el módulo intl para PHPfuente
¿Qué pasa con el uso de algo que ya está implementado en Core?
O uno de los principales métodos de reescritura de url / url.
fuente
Como los gTLD y los IDN se utilizan cada vez más, no puedo ver por qué la URL no debería contener a Andrés.
Solo rawurlencode $ URL que quieras en su lugar. La mayoría de los navegadores muestran caracteres UTF-8 en las URL (tal vez no algunos IE6 antiguos) y bit.ly / goo.gl pueden usarse para acortarlo en casos como el ruso y el árabe si es necesario para fines publicitarios o simplemente escribirlos en anuncios como usuario los escribiría en la URL del navegador.
La única diferencia son los espacios "", podría ser una buena idea reemplazarlos con "-" y "/" si no desea permitirlos.
Url codificada http://www.hurtta.com/RU/%D0%9F%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82%D1%8B/
Url como está escrita http://www.hurtta.com/RU/Продукты/
fuente
Escribí esto basado en la respuesta de Maerlyn. Esta función funcionará independientemente de la codificación de caracteres en la página. Tampoco convertirá comillas simples en guiones :)
fuente
en mi localhost todo estaba bien, pero en el servidor me ayudó "set_locale" y "utf-8" en "mb_strtolower".
fuente
La forma más elegante que creo es usando un Behat \ Transliterator \ Transliterator.
Necesito extender esta clase por tu clase porque es un Resumen, algunos como este:
Y luego, solo úsalo:
Por supuesto, también deberías poner estas cosas en tu compositor.
Más información aquí https://github.com/Behat/Transliterator
fuente
Hay una buena solución de aquí que se ocupa de caracteres especiales también.
Texto Fantástico => texto-fantastico
Autor: Natxet
fuente
Esta puede ser una forma de hacerlo también. Inspirado en estos enlaces Experts-exchange y alinalexander
fuente
Como he visto muchos métodos aquí, he encontrado el método más simple para mí. Quizás ayude a alguien.
fuente
Para mí esta variante es perfecta, también cambia
&
aand
. Aquí está el código:fuente