2009-06-23 16 views
10

के पूंछ-अंत से आगे की स्लैश को हटाकर नीचे दिया गया कोड डेटाबेस में दर्ज की गई वेबसाइटों की शुरुआत से "www।" आदि को हटा देता है। यह बहुत अच्छा काम करता है।PHP - यूआरएल

क्या कोई तरीका है कि मैं उसी डेटाबेस में दर्ज की गई वेबसाइट के पूंछ-अंत से आगे-स्लैश को निकालने के लिए समान कोड का उपयोग कर सकता हूं?

अग्रिम धन्यवाद,

जॉन

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

कृपया इस साइट पर खोज फ़ंक्शन का उपयोग करें। – Mat

उत्तर

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

यह एक अपेक्षाकृत सरल regular expression उपयोग करता है। $ का मतलब केवल स्ट्रिंग के अंत में स्लेश से मेल खाता है, इसलिए यह stackoverflow.com/questions/ में पहली स्लैश को नहीं हटाएगा। घुंघराले ब्रेसिज़ {} सिर्फ डिलीमीटर हैं; PHP को कुछ मूर्खतापूर्ण कारणों से मिलान करने वाले पात्रों और नियमित अभिव्यक्तियों के सामने और पीछे की आवश्यकता होती है।

+0

मैंने सोचा कि मिलान करने वाले वर्ण समान थे, यानी {और {लेकिन नहीं {और} – alex

+0

इसके अलावा, जब आप झंडे की आपूर्ति करना चाहते हैं तो वर्ण उपयोगी होते हैं। जैसे/ [ए-जेड] */मेरा मतलब है कि किसी भी मामले में असंवेदनशील तरीके से मिलान करें। – alex

+1

(), {}, [], और <> अपवाद हैं। आईएमएचओ, झंडे एक अलग पैरामीटर होना चाहिए। 9 5% मेरे पास कोई झंडे नहीं हैं और डिलीमीटर बस शोर हैं। –

3

जॉन पहली बार था और मुझे लगता है कि उनके समाधान प्राथमिकता दी जानी चाहिए, क्योंकि यह तरीका अधिक सुरुचिपूर्ण है, फिर भी यहां एक और एक है:

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

अद्यतन

Thx। मैं इसे अद्यतन और अब भी इस

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

कौन सा शायद यह भी स्वीकार किए जाते हैं जवाब से कूलर बनाता तरह बातें संभालती है;)

+0

कूल। जवाब के लिए धन्यवाद। –

+0

-1 उह, यह समाधान नहीं होना चाहिए - और यह एक नहीं है। आपका कोड $ साइट के रूप में देता है (मैंने इसका परीक्षण भी किया है)। इनपुट के लिए – stefs

+0

@Schnalle thx। इसे अपडेट किया गया! – merkuro

38

आप अक्षर हैं जो आप के लिए एक स्ट्रिंग के बंद छंटनी करना चाहते हैं की एक स्ट्रिंग पारित कर सकते हैं trim कार्यों के परिवार। इसके अलावा, आप स्ट्रिंग का सिर्फ अंत ट्रिम करने के लिए rtrim इस्तेमाल कर सकते हैं:

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

regexps तोप हैं, पीछे की धड़कन चिड़ियों हैं। पूरी तरह से मैं सिर्फ पीछे की ओर धीमा करने से अधिक हटा दूंगा, उदा। रिक्त स्थान, टैब और लाइनब्रैक: $ साइट = आरआरटीआईएम ($ साइट, "/ \ t \ n \ r"); – stefs

+6

भी, आरआरटीआईएम सभी पिछली स्लैश $ साइट = 'http://foo.bar////// "हटा देता है, जबकि रेगेक्सपी केवल एक पिछला स्लैश हटा देता है। – stefs

+1

यह स्वीकार्य उत्तर होना चाहिए। जब ​​तक regex का उपयोग न करें आपको वास्तव में –

0

सबसे सुरुचिपूर्ण समाधान rtrim() उपयोग करने के लिए है।

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

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

संपादित

मैं rtrim बारे में भूल गया();

आप parse_url() के आसपास भी खेल सकते हैं।

+0

वाह है, इस समस्या के बहुत सारे समाधान हैं। धन्यवाद! –

1

क्या आप यही चाहते हैं?

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

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

इस तरह के एक साधारण कार्य के लिए रेगेक्स का उपयोग करना अधिक है। 'rtrim() 'के साथ क्या गलत है? –

-2

शायद एक बेहतर समाधान .htaccess उपयोग करने के लिए होगा, लेकिन php भी कुछ इस तरह के साथ यह कर सकते हैं:

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

सरलतम विधि:

$url = rtrim($url,'/'); 
1
$result = rtrim('example.com/', '/'); 
संबंधित मुद्दे