2012-04-06 23 views
1

Ich habe einen Client. Sagen wir, ihre Domain ist www.mydomain.com.PHP preg_match gibt immer falsch

Wir erstellen eine neue Seite unter www.mydomain.com/newsection.

Auf der Seite/newsection möchte der Client nur dann einen Link hinzufügen, der "Zurück zur Hauptseite" (www.mydomain.com) sagt, wenn sich der Benutzer zuvor auf der Hauptseite befand.

Also, habe ich wie folgt ein Code-Snippet von PHP up:

<?php 
$referral = $_SERVER['HTTP_REFERER']; 
if (preg_match('/http://www.mydomain.com/', $referral)) { 
echo "from My Domain"; 
} else { 
echo "not from My Domain"; 
} 
?> 

Dies ist jedoch immer false zurückgibt ("nicht von meiner Domain"), auch wenn der Benutzer von mydomain.com kommt.

Gibt es irgendwelche offensichtlichen Syntaxfehler oder andere Logikprobleme, die ich nicht verstehe?

Ist das Problem, dass meine neue Seite (www.mydomain.com/newsection) noch auf dieser Hauptdomain ist?

+1

Aktivieren Sie 'error_reporting', dann wird der Fehler offensichtlich. – mario

+0

mögliches Duplikat von [Convert eregi in preg_match - Was ist Unbekannter Modifizierer 'F'?] (Http://stackoverflow.com/questions/3451787/convert-eregi-to-preg-match-what-is-unknown-modifier- f) – mario

Antwort

2

Die Schrägstriche im Ausdruck müssen maskiert werden, da sie auch das Trennzeichen sind. Alternativ können Sie auch ein anderes Trennzeichen wählen:

preg_match('~http://www\.mydomain\.com~', $referral) 

Hinweis Ich entkam auch die . s, die in regulären Ausdrücken Sonderzeichen sind. Sie werden die Regex nicht unterbrechen, aber sie passen zu jedem Zeichen - wahrscheinlich nicht was du willst.

+0

DANKE so sehr. Ich wusste, dass es wahrscheinlich so war, aber ich konnte es einfach nicht herausfinden. Wirklich, wirklich zu schätzen wissen. – Ash

1

können Sie nur strpos

if (strpos($referral, 'http://www.mydomain.com') !== false) { 
+0

Danke - gute Lösung! – Ash

0

Schalten Sie error_reporting verwenden bei der Entwicklung. Sie sind tatsächlich so etwas wie die folgende Warnung bekommen, die Ihnen helfen sollen (vor allem mit MiniTech Antwort kombiniert):

Warning: preg_match() [function.preg-match]: Unknown Modifikator '/' in

+0

Danke für den Tipp! Das werde ich definitiv tun. :) – Ash