2009-06-23 13 views
10

Aşağıdaki kod, bir veritabanına girilen web sitelerinin başından "www." Vb. Kaldırır. Harika çalışıyor.PHP - URL'nin kuyruk sonundan bir eğik çizgi kaldırılması

Aynı veritabanına girilen bir web sitesinin kuyruk sonundan bir eğik çizgi kaldırmak için benzer kodu kullanmanın bir yolu var mı? peşin

sayesinde

John

$remove_array = array('http://www.', 'http://', 'https://', 'https://www.', 'www.'); 
$site = str_replace($remove_array, "", $_POST['site']); 
+0

Lütfen bu sitede arama fonksiyonunu kullanın. – Mat

cevap

18
$site = preg_replace('{/$}', '', $site); 

Bu regular expression nispeten basit kullanır. $, yalnızca dizenin sonundaki eğik çizgileri eşleştirmek anlamına gelir, bu nedenle ilk eğik çizgiyi stackoverflow.com/questions/ içinde kaldırmaz. Kıvırcık parantezler {} sadece sınırlayıcıdır; PHP, bazı aptalca sebeplerle eşleşen karakterleri ve normal ifadelerin ön ve arkasını gerektirir.

+0

Eşleşen karakterlerin aynı olması gerektiğini düşündüm, yani {ve {ama değil {ve} – alex

+0

Ayrıca, bayraklar tedarik etmek istediğinizde char'lar kullanışlıdır. Örneğin./ [a-z] */i, her şeyle duyarsız bir şekilde eşleşmesi anlamına gelir. – alex

+1

(), {}, [] ve <> istisnalardır. IMHO, bayrakların ayrı bir parametre olması gerekiyor. Zamanın% 95'inde hiç bayrak yok ve sınırlayıcılar sadece gürültü. –

3

John önce oldu ve yol daha şık olduğu için, onun çözümü tercih edilmelidir düşünüyorum Ancak burada başka bir tanesidir:

$site = implode("/", array_filter(explode("/", $site))); 

Güncelleme

Thx.

+0

Serin. Cevap için teşekkürler. –

+0

-1 uh, bu bir çözüm olmamalı - ve bir değil. kodunuz $ site olarak döner (ben bile test ettim). Giriş için – stefs

+0

@Schnalle thx. Güncellendi! – merkuro

38

Sen bir dize kapalı kesilmiş istediğiniz bir karakter dizesi geçebilir); bunu güncellenmiş ve şimdi bile muhtemelen kabul edilen yanıt daha işi daha da bu

$site = "///test///test//"; /* to => test/test */ 

gibi fonksiyonları yerine getirir trim işlev ailesi. Ayrıca, dize sadece ucunu düzeltmek için rtrim kullanabilirsiniz:

$site = rtrim($site, "/"); 
+5

regexps toplardır, firar izleri serçelerdir. Yine de, sadece eğik çizgilerden daha fazlasını kaldıracağım, ör. boşluklar, sekmeler ve linebreaks: $ site = rtrim ($ site, "/ \ t \ n \ r"); – stefs

+6

ayrıca, rtrim tüm fraksları kaldırır $ site = 'http://foo.bar////// ", regexp sadece bir iz bırakan çizgiyi kaldırır – stefs

+1

Bu kabul edilen cevap olmalıdır. –

0

en zarif çözüm rtrim() kullanmaktır.

$url = 'http://www.domain.com/'; 

$urlWithoutTrailingSlash = rtrim($url, '/'); 

DÜZENLEME

I rtrim unutmuşum();

Ayrıca parse_url() etrafında oynayabilirsiniz.

+0

Vay, bu soruna bir çok çözüm var.Teşekkür! –

1

İstediğiniz bu mu?

$url = 'http://www.example.com/'; 

if (substr($url, -1) == '/') 
    $url = substr($url, 0, -1); 
-1
$new_string = preg_replace('|/$|', '', $string); 
+2

Böyle basit bir görev için normal ifadeyi kullanmak çok fazla yanlıştır. rtrim() 'ın nesi yanlış? –

-2

Belki daha iyi bir çözüm .htaccess kullanmak olacaktır, ama php de böyle bir şey ile bunu yapabilirsiniz:

<?php 
    header('location: '.preg_replace("/\/$/","",$_SERVER['REQUEST_URI'])); 
?> 
5

En basit yöntem:

$url = rtrim($url,'/'); 
1
$result = rtrim('example.com/', '/'); 
İlgili konular