Reemplace todos los espacios y símbolos especiales con guiones en la URL usando el lenguaje PHP

2 minutos de lectura

avatar de usuario de khushbu
khushbu

¿Cómo reemplazar espacios y guiones cuando aparecen juntos con solo guiones en PHP?

por ejemplo, debajo está mi URL

http://kjd.case.150/1 BHK+Balcony- 700+ sqft. spacious apartmetn Bandra Wes

En esto, quiero reemplazar todos los caracteres especiales con guión en PHP. En la URL ya hay un guión después de “balcón”. Si reemplazo el guión con un carácter especial, se convierte en dos guiones porque ya hay un guión en la URL y solo quiero 1 guión.

  • ¿En qué quieres que se convierta tu URL? http://kjd.case.150/1-BHK-Balcony-700-sqft-spaciou-apartmetn-Bandra-West?

    –Eric

    23 de julio de 2010 a las 13:30

Tu avatar de usuario de Common Sense
Tu sentido común

Yo diría que usted puede quererlo de otra manera. No “espacios”, sino todos los caracteres no alfanuméricos. Porque puede haber otros caracteres no permitidos en la URL (+ signo, por ejemplo, que se usa como reemplazo de espacio)

Entonces, para hacer una URL válida a partir de un texto de formato libre

$url = preg_replace("![^a-z0-9]+!i", "-", $url);

  • ¿No deberían ser barras diagonales, en lugar de signos de exclamación?

    –Eric

    23 de julio de 2010 a las 13:28

  • Primero debe cortar el nombre de dominio, de lo contrario perderá sus puntos.

    –Eric

    23 de julio de 2010 a las 13:31

avatar de usuario de codaddict
coadicto

Si pudiera haber un máximo de un espacio alrededor del guión, puede usar la respuesta de John. Si pudiera haber más de un espacio, puede intentar usar preg_replace:

$str = preg_replace('/\s*-\s*/','-',$str);

Esto reemplazaría incluso a un - no rodeado de ningún espacio con - !!

Para hacerlo un poco más eficiente, podrías hacer:

$str = preg_replace('/\s+-\s*|\s*-\s+/','-',$str);

Ahora bien, esto aseguraría una - tiene al menos un espacio a su alrededor mientras se reemplaza.

Avatar de usuario de Tali Luvhengo
Tali Luvhengo

Esto debería hacerlo por ti

strtolower(str_replace(array('  ', ' '), '-', preg_replace('/[^a-zA-Z0-9 s]/', '', trim($string))));

  • este también se deshace del .pdf al final, lo cual no quieres hacer

    – Diana

    18 de noviembre de 2020 a las 22:23

avatar de usuario de sushilprj
sushilprj

Aplicar esta expresión regular /[^a-zA-Z0-9]/, '-' que reemplazará todos los caracteres no alfanuméricos con -. Guárdelo en una variable y vuelva a aplicar esta expresión regular /\-$/, '' que escapará del último carácter.

Es viejo, pero para ayudar a alguien, use esta función:

function urlSafeString($str)
{
    $str = eregi_replace("[^a-z0-9\040]","",str_replace("-"," ",$str));
    $str = eregi_replace("[\040]+","-",trim($str));
    return $str;
}

le devolverá una cadena segura de URL

¿Ha sido útil esta solución?