2008-11-05 20 views
29

Mein PHP zu entfernen, ist schwach und ich versuche, diese Zeichenfolge zu ändern:PHP ein Zeichen in einem String

http://www.example.com/backend.php?/c=crud&m=index&t=care 
           ^

zu sein:

http://www.example.com/backend.php?c=crud&m=index&t=care 
           ^

die / nach dem backend.php? zu entfernen. Irgendwelche Ideen über den besten Weg, dies zu tun?

Danke!

+0

sollten Sie markieren tatsächlich Antwort als die richtige ‚CMS. – eyelidlessness

Antwort

95

Ich denke, dass es besser ist, einfach str_replace zu bedienen, wie das Handbuch sagt:

Wenn Sie Lust nicht Regeln ersetzt werden müssen (wie reguläre Ausdrücke), Sie sollten immer diese Funktion statt von ereg_replace() oder preg_replace().

<? 
$badUrl = "http://www.site.com/backend.php?/c=crud&m=index&t=care"; 
$goodUrl = str_replace('?/', '?', $badUrl); 
+1

Sie haben meine Stimme. – eyelidlessness

+0

Danke Augenlidness;) – CMS

8
$str = preg_replace('/\?\//', '?', $str); 

Bearbeiten: Siehe CMS 'Antwort. Es ist spät, ich sollte es besser wissen.

+0

Danke, das ist perfekt. –

+2

str_replace ist blendend schneller als eine Regex. – pestilence669

+1

@Pestilence, deshalb empfehle ich die Antwort von CMS. – eyelidlessness

0

Während ein Regexp hier gut passen würde, werde ich Ihnen eine alternative Methode vorstellen. Es könnte ein bisschen schneller als die entsprechende Regexp sein, aber das Leben dreht sich alles um Entscheidungen (... oder etwas).

$length = strlen($urlString); 
for ($i=0; $i<$length; i++) { 
    if ($urlString[$i] === '?') { 
    $urlString[$i+1] = ''; 
    break; 
    } 
} 

Komisch, ich weiß.

+0

Äh, was, wenn $ urlString [$ i + 1] nicht /? – eyelidlessness

+1

Augenlidheit: Das Problem hat diesen Fall nicht dargestellt, also hat meine Lösung dies auch nicht berücksichtigt. MDCore: Bitte erläutern, warum? –

+0

Ich bin auf ein Problem gestoßen, wo es nützlich ist. Wenn deine Zeichenfolge in der Größenordnung von Megs liegt (das kann passieren), riskiert das Ausführen von preg_replace oder str_replace, das php.ini-memory_limit zu treffen. Der pcre_replace-Code in PHP mallocs 2x Ihre String-Größe, bevor Sie irgendetwas tun, so kann es ein Problem sein. –

0
$splitPos = strpos($url, "?/"); 
if ($splitPos !== false) { 
    $url = substr($url, 0, $splitPos) . "?" . substr($url, $splitPos + 2); 
} 
Verwandte Themen