web-dev-qa-db-fra.com

Remplacer les espaces par un tiret dans une URL

J'ai réussi à remplacer les caractères spéciaux tels que:;/etc dans mon URL mais maintenant il a de nouveau les espaces. Voici mon code:

<h3><a href="<?php echo (isset($row_getDisplay['post_id']) ? $row_getDisplay['post_id'] : ''); ?>_<?php echo str_replace(array(':', '\\', '/', '*'), ' ', urldecode($row_getDisplay['title'])); ?>.html" ><?php echo (isset($row_getDisplay['title']) ? $row_getDisplay['title'] : ''); ?></a></h3>

Je veux qu'il aime supprimer les caractères spéciaux et remplacer les espaces par des tirets.

16
Robdogga55

Essayez str_replace(' ', '-', $string);

37
ka_lin

Vous pouvez utiliser preg_replace:

preg_replace('/[[:space:]]+/', '-', $subject);

Cela remplacera toutes les instances d'espace par un seul tiret "-". Donc, si vous avez un espace double, triple, etc., il vous donnera toujours un tiret.

EDIT: c'est une fonction générique que j'ai utilisée au cours de la dernière année pour ranger mes URL

    function formatUrl($str, $sep='-')
    {
            $res = strtolower($str);
            $res = preg_replace('/[^[:alnum:]]/', ' ', $res);
            $res = preg_replace('/[[:space:]]+/', $sep, $res);
            return trim($res, $sep);
    }

Il convertira tous les caractères non alphanumériques en espace, puis convertira tout l'espace en tiret, puis coupera tous les tirets à la fin/au début de la chaîne. Cela fonctionnera mieux que d'avoir à lister des caractères spéciaux dans votre str_replace

18