• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

URL ergänzen

Imbericle

Blogger
Ich will, dass wenn jemand http://www.oder eines der beiden weglässt dieses ergänzen, damit die Links einheitlich formatiert sind.
Ich weiß von den Links sicher, das sie zu diesem Protokoll gehören.

Darum ergänze ich falls sie fehlen wie folgt, ich tue mich nur schwer daran, es hin zu bekommen, dass wenn der Link http://bla.de lautet, das fehlende www. zu erkennen und reinzuquetschen.

PHP:
		if(!ereg("^(http:\/\/)",$Link))
		{
				if(!ereg("^(http:\/\/www\.|www\.)",$Link))
				{
						$Link="http://www." . $Link;
				}
				else 
				{
						Link = "http://" . $Link;
				}
				
		}

Was muss ich ergänzen?

MfG
 
Werbung:
Wieso soll denn www. ergänzt werden? ereg() ist im übrigen veraltet und fliegt vielleicht einmal raus.
 
Werbung:
Mir ist bewusst, dass es meist auch ohne www. funktioniert, doch ich hätte gerne alle Links gleich formatiert.


MfG
 
Werbung:
Achtung funpic.de seiten gehen nur OHNE www (zumindest bei mir)
fügst du nun das www. hinzu ist der link böse gesagt im ar*ch
daher würd ich mir das sparen ;)
 
Genau darauf wollte ich hinaus. "www" ist ein Überbleibsel aus einer Zeit, als das WWW noch was neues war und nicht unter fast jeder Adresse auch ein WWW-Server zu finden war.
 
Werbung:
PHP:
<?php

header('Content-type: text/plain; charset=utf-8');

$test = <<<EOT
http://www.example.org/
http://example.org/
https://www.example.org/
https://example.org/

http://blog.example.org/
http://del.icio.us/
EOT;

$pattern = '#(http(?:s?)://)(?!www\.)([^\'"\s]+)#i';

$test = preg_replace($pattern, '$1www.$2', $test);

echo $test;

Ausgabe:

Code:
http://www.example.org/
http://www.example.org/
https://www.example.org/
https://www.example.org/

http://www.blog.example.org/
http://www.del.icio.us/
 
thx, kann dich leider noch nicht wieder positv bewerten.

Du kennst dich gut mit Suchmustern aus, hast du da ne gute Seite (nicht php.net) wo alle Zeichen die man irgendwie als Sonderzeichen mit Funktion verwenden kann nachlesen kann?

2. Gibt es in Sql Sonderzeichen, welche Sql beachtet, wenn sie in den Anfürungszeichen stehen?


MfG
 
Imbericle schrieb:
Du kennst dich gut mit Suchmustern aus, hast du da ne gute Seite (nicht php.net) wo alle Zeichen die man irgendwie als Sonderzeichen mit Funktion verwenden kann nachlesen kann?

Vorweg: So richtig gut, bin ich darin auch nicht, ich habe lediglich (in der Regel ;)) ausreichend Erfahrung, um das Ziel irgendwie zu erreichen.

Ich stütze mich tatsächlich größtenteils auf php.net (konkret auf Pattern Modifiers und PCRE regex syntax). Auch aus dem Grund, weil dort die PHP-Implementation von Regex beschrieben wird. Bei anderen Sprachen weicht das mitunter leicht ab.

Es werden ansonsten häufig regenechsen.de und regular-expressions.info empfohlen. Mit beiden Seiten habe ich aber keine bzw. kaum Erfahrung. (Defizit!)

Dazu gibt es Tools zum Testen von Ausdrücken. Ich verwende Kodos.

Um ehrlich zu sein: Ich bin lange Zeit (und auch jetzt noch öfter, als mir lieb ist) schlicht nach den Prinzipien "trial and error" und "Haare raufen" vorgegangen.

Ich kann dir mein Pattern schnell aufdröseln. Ich weiß, wie unlesbar sowas wirkt, wenn man es nicht selbst verfasst hat. Allerdings weiß ich nicht, ob das so hilfreich ist.

Code:
#(http(?:s?)://)(?!www\.)([^\'"\s]+)#i

--- 1. [url=http://de.php.net/manual/en/regexp.reference.subpatterns.php]Subpattern[/url] (abrufbar als Match $1) ---

(http      String "http"

(?:s?)     String "s" (optional)
           "?:" markiert ein "[url=http://de.php.net/manual/en/regexp.reference.subpatterns.php]non-capturing subpattern[/url]", das ist einfach ein
           Subpattern, das nicht als Match (z. B. $1) zurückgegeben wird.
             Mir fällt übrigens gerade auf, dass es "https?" genauso tut.
           Na ja. ;)

://)       String "://"


--- 2. Subpattern ([url=http://de.php.net/manual/en/regexp.reference.assertions.php]Assertion[/url] (Zusicherung), nicht abrufbar) ---

(?!www\.)  String "www." (Zusicherung, negiert)
           Das bedeutet, damit ein mit [i]http://[/i] oder [i]https://[/i] beginnender
           Ausdruck vom Gesamtausdruck gematcht wird, darf darauf [i]nicht[/i]
           "www." folgen.


--- 3. Subpattern (abrufbar als Match $2) ---

([^\'"\s]+)  Mindestens ein Zeichen, das kein einfaches oder doppeltes
           Anführungszeichen oder [url=http://de.php.net/manual/en/regexp.reference.backslash.php]kein Whitespace-Zeichen[/url] (Tab, Leerzeichen,
           Zeilenumbruch, ...) ist, muss folgen. Das heißt, es wird so lange
           angenommen, dass ein Zeichen Teil der URL ist, bis ein Anführungs-
           zeichen oder Whitespace folgt.
             Auch das ist nicht perfekt. Es gibt genauere Patterns, um eine
           URL zu matchen. Die sind aber dann auch komplizierter.

Ich kann mich noch gut erinnern, wie ich Regex (über Jahre) gehasst habe, weil ich absolut keine Ahnung hatte, wie man darauf kommen soll. Irgendwann hat es dann aber doch "Klick" gemacht. Ich denke, wenn man die richtigen Tutorials oder Beispiele liest, lernt man das recht schnell. Das habe ich zu wenig gemacht. Im Zweifel einfach alles lesen, auch wenn du nicht immer alles verstehst. Unterbewusst speichert man immer was.

Imbericle schrieb:
2. Gibt es in Sql Sonderzeichen, welche Sql beachtet, wenn sie in den Anfürungszeichen stehen?

Wie genau meinst du das? Sowas wie "\n" (Zeilenumbruch) oder "\t" (horizontales Tab) in PHP? Das kommt glaube ich auf den Fragekontext an. Prinzipiell ja.
 
Werbung:
nen gutes tut zu regex mit übungen: Regenechsen :: Ideas come true | Reguläre Ausdrücke allg. (regenechsen wurde ja schon genannt)

auflistung aller modifier etc: Regulärer Ausdruck – Wikipedia

eine kurzreferenz regex im pdf format: http://www.addedbytes.com/cheat-sheets/download/regular-expressions-cheat-sheet-v2.pdf

das mit den sonderzeichen in mysql habe ich hoffentlich richtig verstanden: MySQL :: MySQL 5.1 Referenzhandbuch :: 9.1.1 Strings
b.z.w: MySQL :: MySQL 5.1 Referenzhandbuch :: 12.3.1 String-Vergleichsfunktionen
 
Zurück
Oben