PHP: Entferne 'http: //' vom Linktitel

8

Ich habe eine Zeichenfolge, die wie folgt aussieht:

$string = '<a href="http://google.com">http://google.com</a>';

Wie kann ich den http:// Teil aus dem Linktext entfernen, aber im href Attribut lassen?

    
Alex 02.02.2011, 13:38
quelle

7 Antworten

11

Ohne einen vollwertigen Parser zu verwenden, kann dies in den meisten Situationen der Fall sein ...

%Vor%

Es verwendet ein negatives Lookbehind , um sicherzustellen, dass kein href=" oder href=' davor steht.

Sehen Sie es auf IDEone .

Berücksichtigt auch Personen, die ihre Attributwerte mit ' begrenzen.

    
alex 02.02.2011, 13:47
quelle
9
%Vor%

Ich habe es einfach in IDEone.com versucht und es hat den gewünschten Effekt.

    
Neil Knight 02.02.2011 13:41
quelle
4

In diesem einfachen Fall funktioniert die Funktion preg_replace wahrscheinlich. Um mehr Stabilität zu erhalten, verwenden Sie DOMDocument :

%Vor%     
lonesomeday 02.02.2011 13:52
quelle
3
%Vor%

funktioniert sowohl für http: // als auch für https: //

Live-Code läuft

    
Nott Responding 02.07.2014 18:32
quelle
2

Jeder einfache reguläre Ausdruck oder String-Ersetzungscode wird wahrscheinlich im allgemeinen Fall fehlschlagen. Der einzige "richtige" Weg, dies zu tun, besteht darin, den Chunk als SGML / XML-Snippet zu analysieren und http:// aus dem Wert zu entfernen.

Für jeden anderen (einigermaßen kurzen) String-Manipulationscode wird es ziemlich einfach sein, ein Gegenbeispiel zu finden, das es bricht.

    
Justin Morgan 02.02.2011 13:45
quelle
2

Wenn angenommen wird, dass "http: //" in $ string immer zweimal auftritt, suchen Sie die Zeichenfolge "http: //" mit strripos rückwärts. Wenn die Suche erfolgreich ist, kennen Sie den start_index von "http: //", den Sie entfernen möchten (und Sie kennen die Länge des Kurses). Jetzt können Sie substr verwenden, um alles zu extrahieren, was vor und nach dem zu entfernenden Block geht.

    
Jong Bor Lee 02.02.2011 13:50
quelle
1
%Vor%     
B4NZ41 02.02.2011 13:42
quelle

Tags und Links