Bewaar de inhoud van een HTML-opmerking

Ik heb een pagina en ik wilde de opmerking van een html-commentaar opslaan als een variabele:

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

Hoe krijg ik alleen de inhoud van de html-opmerking? Ik zocht naar een paar antwoorden, maar het werkt niet.

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);
0
Ik denk dat ik niet echt zeker weet wat je code moet doen, maar ik zie niet hoe het iets anders dan een URL zelf heeft gekregen om te ontleden? Zie: codepad.org/vVo5TvIC Opmerking, ik heb de $ _ SERVER verwijzingen naar strings omgezet alleen als een demo. Maar dat is geen HTML-opmerking, maar het komt terug.
toegevoegd de auteur Jared Farrish, de bron
Misschien moet je het proberen: $ content = getCurrentUrl ();
toegevoegd de auteur The Nail, de bron

4 antwoord

Ik weet dat veel mensen vodden aan reguliere expressies, maar ze kunnen hier van pas komen. Probeer iets als:

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

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

Succes.

2
toegevoegd
Hé, niks mis met een beetje regex. Hoewel ik moet vragen waarom u de \ S in een tekenklasse plaatst.
toegevoegd de auteur Tyler Crompton, de bron
Ik ben niet vies van regex, het is een geweldig hulpmiddel. Maar niet voor het parseren van HTML.
toegevoegd de auteur pguardiario, de bron
Vooral omdat ik geen expert ben op het gebied van regex en het de kortste weg leek. Als ik dit eigenlijk zou doen, zou ik een meer strikte regex gebruiken die ervoor zorgt dat het eigenlijk een URL is, maar dit leek goed, voor zover voorbeelden.
toegevoegd de auteur Jemaclus, de bron
ik heb geprobeerd een url in te voeren in $ html maar er gebeurt niets
toegevoegd de auteur FBwall, de bron

Je code is een beetje in de war:

  1. U hebt de strings waarnaar u op zoek bent achteruit; met behulp van substr() , zou het moeten zijn hooiberg, startpositie, lengte .
  2. U zoekt naar de verkeerde openingstag ( " in plaats van -> ), en hun positie in de argumentlijst is omgekeerd van wat het zou moeten zijn ( start, lengte in plaats van last, first zoals het lijkt dat je hebt).
  3. U zoekt niets dat zelfs maar een html-tag benadert met de geretourneerde waarde van getCurrentUrl() .

Het onderstaande werkt echter. Merk echter ook op dat dit niet werkt als er meerdere html-opmerkingen zijn in uw markup die u zoekt.

<?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

Which prints:

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

22, 27
http://localhost/sfddsf.png
0
toegevoegd

Html niet parseren met regex. Gebruik xpath:

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

foreach($xpath->query("//comment()") as $comment){
    echo $comment->nodeValue."\n";
}
0
toegevoegd

Zou het niet moeten zijn:

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

?

Of als u de en de -> en een schone string niet wilt, kunt u het volgende doen:

$start = strpos($html, "<!--") + 4;
$end = strpos($html, "-->");
$content = trim(substr($html, $start, $end - $start));
0
toegevoegd
Dat gezegd hebbende, ben ik het eens met Jemaclus over reguliere expressies.
toegevoegd de auteur The Nail, de bron