Mejorar la conversión de cadena a URL legibles
Frecuentes
Visto 656 veces
3
La siguiente función reescribe las URL de los títulos de noticias y productos que contienen todo tipo de caracteres. La cadena que deseo crear consiste solo en valores alfanuméricos y "-", pero no termina en "-" o espacios en blanco y no repite "-". La siguiente función funciona bien, pero me preguntaba si hay alguna forma de escribirla de manera más simple o más eficiente.
function urlName($string) {
$string = trim($string); // no open ends
$string = strtolower($string); // all lowercase
$string = strtr($string, 'äöåÄÖÅ', 'aoaaoa'); // substitute umlauts
$string = preg_replace('/[\W]+/', '-', $string); // substitute non-word characters with -
$string = preg_replace('/^-*|-*$/', '', $string); // no beinging or ending -
return $string;
}
2 Respuestas
1
Creo que su código se puede compactar a esto:
function urlName($string) {
$patterns = array('/^[\s-]+|[\s-]+$/', '/[\W]+/');
$replacements = array('', '-');
$string = strtr(strtolower($string), 'äöåÄÖÅ', 'aoaaoa');
// or you can use:
// $string = strtr(strtolower($string), $someTrMapping);
return preg_replace($patterns, $replacements, $string);
}
Respondido el 12 de junio de 12 a las 14:06
Gracias por tu comentario. Me di cuenta de que el recorte no era necesario con el filtrado de expresiones regulares correcto de todos modos. Aceptaré su respuesta, porque no sabía que puede alimentar matrices de coincidencia y reemplazo de preg_replace, no solo valores individuales. - contorno
1
A menudo uso esto:
function simpleText($s) {
$rpl = array(
"À" => 'A', "Á" => 'A', "Â" => 'A', "Ã" => 'A', "Ä" => 'A', "Å" => 'A',
"à" => 'a', "á" => 'a', "â" => 'a', "ã" => 'a', "ä" => 'a', "å" => 'a',
"Ò" => 'O', "Ó" => 'O', "Ô" => 'O', "Õ" => 'O', "Ö" => 'O', "Ø" => 'O',
"ò" => 'o', "ó" => 'o', "ô" => 'o', "õ" => 'o', "ö" => 'o', "ø" => 'o',
"È" => 'E', "É" => 'E', "Ê" => 'E', "Ë" => 'E',
"è" => 'e', "é" => 'e', "ê" => 'e', "ë" => 'e',
"Ç" => 'C',
"ç" => 'c',
"Ì" => 'I', "Í" => 'I', "Î" => 'I', "Ï" => 'I',
"ì" => 'i', "í" => 'i', "î" => 'i', "ï" => 'i',
"Ù" => 'U', "Ú" => 'U', "Û" => 'U', "Ü" => 'U',
"ù" => 'u', "ú" => 'u', "û" => 'u', "ü" => 'u',
"Ÿ" => 'Y',
"ÿ" => 'y',
"Ñ" => 'N',
"ñ" => 'n'
);
$s = preg_replace('`\s+`', '_', strtr($s, $rpl));
$s = strtolower(preg_replace('`_+`', '_', preg_replace('`[^-_A-Za-z0-9]`', '', $s)));
return trim($s, '_');
}
Respondido el 12 de junio de 12 a las 14:06
Gracias por la extensa tabla de conversión. - contorno
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php regex url url-rewriting slug or haz tu propia pregunta.
Esto se ha preguntado aquí antes con el código incluido. buscándolo ahora. - John Conde
posible duplicado de ¿Nombre de usuario compatible con URL en PHP? - John Conde
¿Por qué solo diéresis? ¿Qué pasa con otros caracteres especiales como
áéüíú
? - kapaLos dominios -bažmegakapa no tienen, por lo que la mayoría de los usuarios esperan que las rutas se comporten de la misma manera. -John Conde gracias por el enlace - Creo que el problema es algo parecido, pero no exactamente igual. No le preocupan los nombres que contienen caracteres que no son palabras (como % - &, etc.) -Mike B ty, intentará agregar la etiqueta - kontur
-bažmegakapa En realidad leí mal tu comentario. Tienes toda la razón sobre otros personajes también. Debo mencionar que el servidor ejecuta php 4.3, por lo que podría ser necesario algo como la tabla de conversión de yent :( - kontur