Сохранить содержимое комментария HTML - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть страница, и я хотел сохранить комментарий html-комментария как переменную:

<!--http://localhost/sfddsf.png-->

Как получить только содержимое html-комментария? Я искал пару ответов, но это не работает.

function getCurrentUrl(){
    $domain = $_SERVER['HTTP_HOST'];
    $url = "http://" . $domain . $_SERVER['REQUEST_URI'];
    return $url;
}
$html = getCurrentUrl();
$content = substr($html, strpos($html, "-->"), strpos($html, "<--"));
print_r( $content);

Ответы [ 4 ]

2 голосов
/ 07 декабря 2011

Я знаю, что многие тряпичны регулярными выражениями, но они могут пригодиться здесь.Попробуйте что-то вроде:

    $html = '<!--http://localhost/sfddsf.png-->';

    preg_match('/<!--([\S]+)-->/', $html, $matches);
    if ($matches[1])
       $url = $matches[1]; // should be http://localhost/sfddsf.png

Удачи.

0 голосов
/ 07 декабря 2011

Не анализируйте HTML с регулярным выражением.Используйте xpath:

$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DomXpath($dom);

foreach($xpath->query("//comment()") as $comment){
    echo $comment->nodeValue."\n";
}
0 голосов
/ 07 декабря 2011

Ваш код немного сбит с толку:

  1. У вас есть строки, которые вы ищете в обратном направлении; используя substr(), оно должно быть haystack, start position, length.
  2. Вы ищете неправильный открывающий тег ("<!--" вместо -->), и их позиция в списке аргументов меняется с того, что должно быть (start, length вместо last, first, как вы есть).
  3. Вы не ищете ничего, что даже приближает тег html с возвращаемым значением getCurrentUrl().

Ниже, однако, работает. Однако обратите внимание, что это не будет работать, если в разметке, которую вы ищете, есть несколько html-комментариев.

<?php

$html = "
<html>
<head>
<!--http://localhost/sfddsf.png-->
</head>
<body></body>
</html>
";

echo "$html\n";
$strstart = strpos($html, "<!--") + 4;
$strend = strpos($html, "-->") - $strstart;
echo "$strstart, $strend\n";
$content = substr($html, $strstart, $strend);
print($content);

?>

http://codepad.org/3STPRsoj

Какие отпечатки:

<html>
<head>
<!--http://localhost/sfddsf.png-->
</head>
<body></body>
</html>

22, 27
http://localhost/sfddsf.png
0 голосов
/ 07 декабря 2011

Не должно ли быть:

$start = strpos($html, "<!--");
$end = strpos($html, "-->") + 3;
$content = substr($html, $start, $end - $start);

Или, если вам не нужны <!--, --> и чистая строка, вы можете сделать:

$start = strpos($html, "<!--") + 4;
$end = strpos($html, "-->");
$content = trim(substr($html, $start, $end - $start));
...