6 Stimmen

Regulärer Ausdruck, ersetzt mehrere Schrägstriche durch nur einen

Es scheint ein leicht zu lösendes Problem zu sein, aber es ist nicht so einfach, wie es scheint. Ich habe diese Zeichenfolge in PHP:

////%postname%/

Dies ist eine URL, und ich möchte nie mehr als einen Schrägstrich in einer Reihe. Ich möchte die Schrägstriche nie ganz entfernen.

So sollte es aussehen:

/%postname%/

Da die Struktur anders aussehen könnte, brauche ich einen cleveren preg replace regexp, denke ich. Es muss mit URLS wie diesen funktionieren:

////%postname%//mytest/test///testing

die in diese umgewandelt werden sollte:

/%postname%/mytest/test/testing

21voto

Alix Axel Punkte 146320

Hier ist es:

$str = preg_replace('~/+~', '/', $str);

Oder:

$str = preg_replace('~//+~', '/', $str);

Oder sogar:

$str = preg_replace('~/{2,}~', '/', $str);

シンプルな str_replace() funktioniert ebenfalls (wenn es nicht mehr als zwei aufeinanderfolgende Schrägstriche gibt):

$str = str_replace('//', '/', $str);

5voto

K-Gun Punkte 10609

Spät aber doch werden alle diese Methoden die http:// Schrägstriche auch, aber das.

function to_single_slashes($input) {
    return preg_replace('~(^|[^:])//+~', '\\1/', $input);
}

# out: http://localhost/lorem-ipsum/123/456/
print to_single_slashes('http:///////localhost////lorem-ipsum/123/////456/');

4voto

Bart Kiers Punkte 160101

Versuchen Sie es:

echo preg_replace('#/{2,}#', '/', '////%postname%//mytest/test///testing');

4voto

Gal Punkte 21957
function drop_multiple_slashes($str)
{
  if(strpos($str,'//')!==false)
  {
     return drop_multiple_slashes(str_replace('//','/',$str));
  }
  return $str;
}

das verwendet str_replace

0voto

Thomas Decaux Punkte 19874

Meine Lösung:

while (strlen($uri) > 1 && $uri[0] === '/' && $uri[1] === '/') {
    $uri = substr($uri, 1);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X