php - sal - como se limpia la plata para que quede brillante
¿Cuál es la mejor manera de limpiar una cadena para colocarla en una URL, como el nombre de la pregunta en SO? (1)
Como ya señaló, urlencode () no es necesario en este caso y tampoco lo es trim (). Si lo entiendo correctamente, el paso 4 es evitar múltiples guiones en una fila, pero no evitará más de dos guiones. Por otro lado, la solución eliminará los guiones que conectan dos palabras (como en "gran escala") mientras que parecen conservarse en SO.
No estoy seguro de que esta sea realmente la mejor manera de hacerlo, pero esta es mi sugerencia:
$str = strtolower(
preg_replace( array(''/[^a-z0-9/- ]/i'', ''/[ /-]+/''), array('''', ''-''),
$urlPart ) );
Asi que:
- eliminar cualquier carácter que no sea ni espacio, ni tablero, ni alfanumérico
- reemplace cualquier número consecutivo de espacios o guiones con un solo guión
- strtolower ()
Estoy buscando crear una cadena de URL como la que SO usa para los enlaces a las preguntas. No estoy buscando reescribir la url (mod_rewrite). Estoy buscando generar el enlace en la página.
Ejemplo: el nombre de la pregunta es:
Is it better to use ob_get_contents() or $text .= ‘test’;
La URL termina siendo:
http://stackoverflow.com/questions/292068/is-it-better-to-use-obgetcontents-or-text-test
La parte que me interesa es:
is-it-better-to-use-obgetcontents-or-text-test
Así que, básicamente, estoy buscando eliminar todo lo que no sea alfanumérico y, al mismo tiempo, mantener la URL legible. He creado lo siguiente, pero no estoy seguro de si es la mejor manera o si abarca todas las posibilidades:
$str = urlencode(
strtolower(
str_replace(''--'', ''-'',
preg_replace(array(''/[^a-z0-9 ]/i'', ''/[^a-z0-9]/i''), array('''', ''-''),
trim($urlPart)))));
Así que básicamente:
- recortar
- reemplace cualquier no alfanumérico más el espacio sin nada
- luego reemplace todo lo que no sea alfanumérico con un guión
- reemplazar con -.
-
strtolower()
-
urlencode()
- probablemente no sea necesario, pero solo por si acaso.