Ich benötige einen regulären Ausdruck in PHP, um das Meta-Tag http-equiv = "refresh" in einer URL zu finden. Was ich brauche, ist die tatsächliche URL zu folgen. Soweit ich weiß, gibt es zwei gültige Möglichkeiten, dieses Meta-Tag zu verwenden:
content="0; url=urlhere" http-equiv="refresh" />
und
http-equiv="refresh" content="0; url=urlhere"/>
Vielen Dank!
Antworten:
4 für die Antwort № 1http-equivW*refresh.+?urlW+?[""](.+?)[""]
Versuchen:
if (preg_match("/meta.+?http-equivW+?refresh/i", $x)) {
preg_match("/content.+?urlW+?[""](.+?)[""]/i", $x, $matches);
print_r($matches);
}
3 für die Antwort № 2
Dima,
Versuche dies:
<?
preg_match("|content="d+;url=(.*?)"|i", "<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://www.stackoverflow.com">", $res1);
preg_match("|content="d+;url=(.*?)"|i", "<META CONTENT="5;URL=http://www.stackoverflow.com" HTTP-EQUIV="Refresh">", $res2);
echo "<pre>";
var_dump($res1);
var_dump($res2);
echo "</pre>";
?>
Ausgabe:
array(2) {
[0]=>
string(44) "CONTENT="5;URL=http://www.stackoverflow.com""
[1]=>
string(28) "http://www.stackoverflow.com"
}
array(2) {
[0]=>
string(44) "CONTENT="5;URL=http://www.stackoverflow.com""
[1]=>
string(28) "http://www.stackoverflow.com"
}
Denken Sie daran, dass Sie mit Leerzeichen umgehen müssen (innerhalb des Inhaltsattributs, zwischen Tags, innerhalb des http-Äquiv-Attributs usw.), wie zum Beispiel:
<META HTTP-EQUIV="Refresh" CONTENT=" 5 ; URL=http://www.stackoverflow.com ">
Das folgende Code-Snippet behandelt diesen Fall:
<?
preg_match("|content="s*d+s*;s*url=(.*?)s*"|i", "<META HTTP-EQUIV="Refresh" CONTENT=" 5 ; URL=http://www.stackoverflow.com ">", $res3);
echo "<pre>";
var_dump($res3);
echo "</pre>";
?>
Ausgabe:
array(2) {
[0]=>
string(48) "CONTENT=" 5 ; URL=http://www.stackoverflow.com ""
[1]=>
string(28) "http://www.stackoverflow.com"
}
Wenn dies nicht ausreicht, können Sie auf jeder Seite des Inhaltsattributs auf http-equiv = "refresh" prüfen (berücksichtigen Sie dabei immer die Leerzeichen):
<?
preg_match("|(?:http-equiv="refresh".*?)?content="d+;url=(.*?)"(?:.*?http-equiv="refresh")?|i", "<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://www.stackoverflow.com">", $res4);
preg_match("|(?:http-equiv="refresh".*?)?content="d+;url=(.*?)"(?:.*?http-equiv="refresh")?|i", "<META CONTENT="5;URL=http://www.stackoverflow.com" HTTP-EQUIV="Refresh">", $res5);
echo "<pre>";
var_dump($res4);
var_dump($res5);
echo "</pre>";
?>
Ausgabe:
array(2) {
[0]=>
string(44) "CONTENT="5;URL=http://www.stackoverflow.com""
[1]=>
string(32) "http://www.stackoverflow.com"
}
array(2) {
[0]=>
string(65) "CONTENT="5;URL=http://www.stackoverflow.com" HTTP-EQUIV="Refresh""
[1]=>
string(32) "http://www.stackoverflow.com"
}
Sie könnten den gleichen Ansatz verwenden. Unterstützung für die Berücksichtigung der Teile hinzufügen.
Denken Sie auch daran, immer reguläre Ausdrücke mit der Option i auszuführen, um die Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung zu aktivieren.