2009-11-08 17 views
9

Les gars J'ai une question, en espérant que vous pouvez m'aider avec celui-ci. J'ai un bookmarklet;Obtenez l'URL actuelle mais sans le bookmarklet de la partie http: //!

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

qui prend l'URL de la page Web actuelle et la recherche dans un autre site Web. Lorsque j'utilise ce bookmarklet, il prend l'URL entière, y compris http:// et la recherche. Mais maintenant je voudrais changer ce bookmarklet donc il faudra seulement le www.example.com ou juste example.com (sans http://) et rechercher cette URL. Est-il possible de faire cela et pouvez-vous s'il vous plaît m'aider avec celui-ci?

Merci!

Répondre

7

Cela devrait le faire

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

Cela fonctionne 99% du temps. Cependant, cela ne fonctionne pas si l'URL actuelle est par ex. 'http: //somesite.com/query=http: // someothersite.com/blahblah'. Toutes les instances de "http: //" seront remplacées non seulement par la première occurrence. Ne fonctionne pas pour 'https: //' aussi. –

+2

L'a corrigé. Gère la correspondance http/https + caseinsensitve. Remplace également seulement la première occurrence. – jitter

+0

Ok, bon effort. +1 –

3

Utilisation document.location.host au lieu de document.location.href. Cela contient uniquement le nom d'hôte et non l'URL complète.

+0

Je ne sais pas pourquoi dans le monde tout le monde suggère des expressions régulières quand l'objet de localisation le fait déjà pour vous comme suggéré par Gumbo. La documentation est une bonne chose: https://developer.mozilla.org/En/DOM/Window.location – epascarello

+1

Oh oui, il est plus facile d'utiliser "str = location.host + location.path + location.search". Que diriez-vous du numéro de port? –

+1

@ o.k.w: Bostjan veut simplement connaître l'hôte et non l'URL complète. – Gumbo

-1

Avez-vous le contrôle sur website.com autre.example.com? Cela devrait probablement être fait du côté du serveur.

Dans ce cas:

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

devrait fonctionner. Ou, vous pouvez utiliser str_replace(...), mais sachez que cela pourrait enlever « http: // » de quelque part à l'intérieur de l'URL:

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

EDIT: ou, si vous voulez juste le nom d'hôte, vous pouvez essayer parse_url(...)?

+0

Ceci est une question JavaScript. ce sont des fonctions PHP. – mAAdhaTTah

-1

utilisation de javascript replace par correspondance des expressions rationnelles:

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

Remplacer (? Https | fichier) avec votre choix, par exemple ftp, gopher, telnet etc.

+0

effectivement cela ne fonctionnera pas pour le fichier que ce protocole utilise trois barres – jitter

+0

@ jitter: "fichier" n'était pas censé être inclus, il n'a pas d'utilisation pratique.Il a été ajouté pendant que je testais le code localement sur ma machine. De toute façon, n'a pas vraiment d'importance :) –