2008-11-05 39 views
29

php của tôi là yếu và tôi đang cố gắng để thay đổi chuỗi này:PHP loại bỏ một nhân vật trong một chuỗi

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

là:

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

tháo / sau backend.php?. Bất kỳ ý tưởng về cách tốt nhất để làm điều này?

Cảm ơn!

+0

Bạn thực sự nên đánh dấu câu trả lời CMS' là đúng. – eyelidlessness

Trả lời

95

Tôi nghĩ rằng nó tốt hơn để sử dụng đơn giản str_replace, như hướng dẫn nói:

Nếu bạn không cần phải tưởng tượng thay thế quy tắc (như biểu thức thông thường), bạn nên luôn luôn sử dụng chức năng này thay của ereg_replace() hoặc preg_replace().

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

Bạn đã có phiếu bầu của tôi. – eyelidlessness

+0

Cảm ơn mí mắt;) – CMS

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

Chỉnh sửa: Xem câu trả lời của CMS. Muộn rồi, tôi nên biết rõ hơn.

+0

Cảm ơn, đó là hoàn hảo. –

+2

str_replace nhanh hơn một regex. – pestilence669

+1

@Pestilence, đó là lý do tại sao tôi đề nghị câu trả lời của CMS. – eyelidlessness

0

Khi regexp phù hợp ở đây tốt, tôi sẽ giới thiệu cho bạn một phương pháp thay thế. Nó có thể là một chút nhanh hơn regexp tương đương, nhưng cuộc sống của tất cả về sự lựa chọn (... hoặc một cái gì đó).

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

Lạ, tôi biết.

+0

Er, nếu $ urlString [$ i + 1] không phải là /? – eyelidlessness

+1

mí mắt: vấn đề không có trong trường hợp đó, vì vậy giải pháp của tôi cũng không tính đến nó. MDCore: hãy giải thích, tại sao vậy? –

+0

Tôi đã gặp phải sự cố hữu ích. Nếu chuỗi của bạn là theo thứ tự của megs trong kích thước (nó có thể xảy ra), chạy preg_replace hoặc str_replace sẽ có nguy cơ hit memory.limit php.ini của bạn. Mã pcre_replace trong php luôn luôn mallocs 2x kích thước chuỗi của bạn trước khi làm bất cứ điều gì, vì vậy nó có thể là một vấn đề. –

0
$splitPos = strpos($url, "?/"); 
if ($splitPos !== false) { 
    $url = substr($url, 0, $splitPos) . "?" . substr($url, $splitPos + 2); 
} 
Các vấn đề liên quan