So entfernen Sie „http://“ aus einer URL in JavaScript [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
Peter

Ich bin in eine seltsame Situation geraten. Ich schreibe ein JavaScript-Lesezeichen, mit dem Benutzer sehr einfach und schnell auf externe Websites klicken und sie mit unserer Website teilen können. Es erhält einfach den Titel, die Seiten-URL, und wenn sie Text auf der Seite ausgewählt haben, wird er auch erfasst.

Das Problem ist, dass es aus irgendeinem Grund nicht mit externen Domänen funktioniert. Wenn wir es also intern verwenden, erhalten wir am Ende ein Freigabefenster mit der URL, die wie folgt formatiert ist:

http://internaldomain.com/sharetool.php?shareid=http://internaldomain.com/anotheroddpage.html&title=….

Das funktioniert gut, ABER wenn wir versuchen, eine externe Domain zu verwenden und am Ende eine URL haben, die so formatiert ist:

http://internaldomain.com/sharetool.php?shareid=http://externaldomain.com/coolpagetoshare.html&title=

Dann bekommen wir ein Verbotener Fehler auf unserer Seite und kann sie nicht laden… Wenn wir die manuell entfernen http:// von der Externaldomain-Adresse lädt es wieder einwandfrei.

Also .. Ich denke, die beste Lösung, um dieses Problem zu umgehen, besteht darin, das JavaScript-Lesezeichen zu ändern, um das zu entfernen http wie es das Fenster lädt. So sieht mein aktuelles Bookmarklet aus:

javascript:var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),f="http://internaldomain.com/sharetool.php",l=d.location,e=encodeURIComponent,u=f+'?u='+e(l.href)+

Wie du sehen kannst, e(l.href) Hier wird die URL übergeben.

Wie kann ich das ändern, damit es die externen Domänen entfernt http://?

Benutzer-Avatar
FehlgeschlagenDev

Ich denke, es wäre besser, alle möglichen Protokolle zu berücksichtigen.

result = url.replace(/(^\w+:|^)\/\//, '');

  • Das funktionierte wie am Schnürchen ‘+e(l.href.replace(/.*?:\/\//g, “”)

    – Petrus

    21. November 2011 um 1:32 Uhr


  • Dies ist eine sehr schlechte Regex. .*? – bedeutet nicht gierige Übereinstimmung, aber /g Modifikator erzwingt, dass der Ausdruck viele Male angewendet wird (dh alle gefundenen Protokolle ausschneiden?). Auch der Ausdruck hat kein ^, um mit dem Anfang übereinzustimmen. Besser: /^.*?:\/\//

    – Disjunktion

    17. März 2014 um 15:22 Uhr


  • @disjunction Auch wenn Sie Ihre Kommentare ignorieren, wurde diese Regex genau deshalb so geschrieben, da dies in der Antwort klar angegeben ist.

    – FehlgeschlagenDev

    18. März 2014 um 9:41 Uhr

  • Bitte beachten Sie, dass in echten Webseiten ein relatives Protokoll vorhanden ist // ist eine gängige Praxis paulirish.com/2010/the-protocol-relative-url. Also schlage ich Regexp vor /^\/\/|^.*?:\/\// (Du kannst es besser machen, da bin ich mir sicher)

    – Dan

    7. November 2016 um 10:19 Uhr

  • @Dan, guter Anruf! Lassen Sie uns also noch weiter gehen und dies mit ‘mailto:’ mit dieser Bearbeitung zum Laufen bringen: .replace(/^\/\/|^.*?:(\/\/)?/, '');

    – gdibble

    24. August 2017 um 19:11 Uhr

Benutzer-Avatar
matsko

url = url.replace(/^https?:\/\//, '')

  • kleine Verbesserung: /^(https?:|)\/\//

    – Artjom P

    3. Mai 2016 um 15:07 Uhr

  • Funktioniert hervorragend, danke, für eine einfachere Verwendung: let removeHttp = function(link) { return link.replace(/^(https?:|)\/\//, ”); }; let string = removeHttp(link);

    – Edgar Quintero

    28. Mai 2018 um 16:26 Uhr

  • url.replace(/^(?:https?:\/\/)?(?:www\.)?/i, "").split('.')[0] Dies wird erledigt http, https und www

    – SirPhemmiey

    28. August 2019 um 18:43 Uhr


  • @SirPhemmiey Nein, das hat dazu geführt, dass Subdomains für mich entfernt wurden

    – Karson

    30. März um 23:43 Uhr

l.href.replace(/^http:\/\//, '')

Benutzer-Avatar
idanzalz

Ich denke, der reguläre Ausdruck, den Sie brauchen, ist /(?:http://)(.*)/i. Das erste Match davon sollte es sein.

Benutzer-Avatar
Mindaugas Karla

Versuchen Sie es mit ersetzen Funktion

var url = url.replace("http%3A%2F%2F", "");

  • Dies ist aufgrund der fehlenden Verwendung regulärer Ausdrücke nicht ideal. Bei einer einfachen Textersetzung wie dieser müssten Sie mehrere verketten .replace() Funktionsaufrufe, um alle verschiedenen Variationen zu berücksichtigen, die benötigt werden (http/https/ etcetera..)

    – gdibble

    24. August 2017 um 19:13 Uhr

  • Dies ist aufgrund der fehlenden Verwendung regulärer Ausdrücke nicht ideal. Bei einer einfachen Textersetzung wie dieser müssten Sie mehrere verketten .replace() Funktionsaufrufe, um alle verschiedenen Variationen zu berücksichtigen, die benötigt werden (http/https/ etcetera..)

    – gdibble

    24. August 2017 um 19:13 Uhr

1098490cookie-checkSo entfernen Sie „http://“ aus einer URL in JavaScript [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy