2009-11-08 17 views
9

दोस्तों मेरे पास एक सवाल है, उम्मीद है कि आप इस के साथ मेरी मदद कर सकते हैं। मेरे पास एक बुकमार्कलेट है;वर्तमान यूआरएल प्राप्त करें लेकिन http: // part bookmarklet के बिना!

javascript:q=(document.location.href);void(open('http://other.example.com/search.php?search='+location.href,'_self ','resizable,location,menubar,toolbar,scrollbars,status')); 

जो और एक अन्य वेबसाइट में इसके लिए खोज वर्तमान वेबपृष्ठ का URL लेता है। जब मैं इस बुकमार्कलेट का उपयोग करता हूं तो यह पूरे यूआरएल को http:// समेत लेता है और इसकी खोज करता है। लेकिन अब मैं इस बुकमार्कलेट को बदलना चाहता हूं, इसलिए इसमें केवल www.example.com या example.com (http:// के बिना) और इस यूआरएल की खोज होगी। क्या यह करना संभव है और क्या आप कृपया इस के साथ मेरी मदद कर सकते हैं?

धन्यवाद!

उत्तर

7

यह क्या करना चाहिए यह

location.href.replace(/https?:\/\//i, "") 
+0

इस बार के 99% काम करता है। हालांकि वर्तमान यूआरएल उदाहरण के लिए यह काम नहीं करता है 'Http: //somesite.com/query=http: // someothersite.com/blahblah'। "Http: //" के सभी उदाहरणों को केवल पहले मौके पर ही नहीं बदला जाएगा। 'Https: //' के लिए भी काम नहीं करता है। –

+2

इसे फिक्स्ड। Http/https + caseinsensitve मिलान संभालती है। यह केवल पहली घटना को बदल देता है। – jitter

+0

ठीक है, अच्छा प्रयास। +1 –

3

उपयोग document.location.host बजाय document.location.href। इसमें केवल होस्ट नाम है और पूर्ण यूआरएल नहीं है।

+0

मुझे यकीन नहीं है कि दुनिया में क्यों हर कोई नियमित अभिव्यक्तियों का सुझाव देता है जब स्थान वस्तु पहले से ही आपके लिए यह करती है क्योंकि गम्बो ने सुझाव दिया था। दस्तावेज़ीकरण एक अच्छी बात है: https://developer.mozilla.org/En/DOM/Window.location – epascarello

+1

ओह हाँ, "str = location.host + location.path + location.search" का उपयोग करना आसान है। बंदरगाह संख्या के बारे में कैसे? –

+1

@ o.k.w: बोस्टन स्पष्ट रूप से मेजबान को जानना चाहता है, न कि पूरा यूआरएल। – Gumbo

-1

क्या आपके पास वेबसाइट.com अन्य.example.com पर नियंत्रण है? यह शायद सर्वर की तरफ किया जाना चाहिए।

जो मामले में:

preg_replace("/^https?:\/\/(.+)$/i","\\1", $url); 

काम करना चाहिए। या, आप str_replace(...) इस्तेमाल कर सकते हैं, लेकिन ध्यान रखें कि कि 'http: //' पट्टी हो सकता है कहीं न कहीं से URL के अंदर:

str_replace(array('http://','https://'), '', $url); 

संपादित करें: या, यदि आप सिर्फ होस्ट नाम चाहते हैं, आप parse_url(...) की कोशिश कर सकते?

+0

यह एक जावास्क्रिप्ट प्रश्न है; ये PHP कार्य हैं। – mAAdhaTTah

-1

रेगुलर एक्सप्रेशन मिलान के माध्यम से जावास्क्रिप्ट replace का उपयोग करना:

javascript:q=(document.location.href.replace(/(https?|file):\/\//,''));void(open('http://website.com/search.php?search='+q,'_self ','resizable,location,menubar,toolbar,scrollbars,status')); 

बदलें (? Https | फ़ाइल) अपनी पसंद के साथ, उदा एफटीपी, गोफर, टेलनेट इत्यादि

+0

असल में यह फ़ाइल के लिए काम नहीं करेगा क्योंकि प्रोटोकॉल तीन स्लैश – jitter

+0

@jitter का उपयोग करता है: "फ़ाइल" को शामिल नहीं किया जाना चाहिए, इसका कोई व्यावहारिक उपयोग नहीं है।यह जोड़ा गया था जब मैं अपनी मशीन पर स्थानीय रूप से कोड का परीक्षण कर रहा था। वैसे भी, वास्तव में कोई फर्क नहीं पड़ता :) –