PHP взорвать неопределенное уведомление о смещении

Я пытаюсь получить ссылку токена, но не могу. Источник:

<span class="ipsHide" data-role="downloadCounterContainer">Download begins in  <span data-role="downloadCounter"></span> seconds</span>
<a href='https://example.com/forum/files/file/2-content/?do=download&amp;r=24050&amp;confirm=1&amp;t=1&amp;csrfKey=72c4d0ffcabb34c6d6c490cbacbc354ag1536355261' class='ipsButton ipsButton_primary ipsButton_small' data-action="download" >Download</a>

Explode:

$url = "link";
$content = file_get_contents($url);
$first = explode( "<span data-role=\"downloadCounter\"></span> seconds</span>" , $content );
$last = explode("' class='ipsButton ipsButton_primary ipsButton_small'" , $first[1] );
echo $last[0];

В чем проблема?

-1

Решение

Вы используете разнесение с разделителем, поэтому значение $last[0] даст вам строку:

<a href='https://example.com/forum/files/file/2-content/?do=download&amp;r=24050&amp;confirm=1&amp;t=1&amp;csrfKey=72c4d0ffcabb34c6d6c490cbacbc354ag1536355261

Что вы могли бы сделать, это использовать DOMDocument а также DOMXPath и укажите имена классов для получения тегов a, а из них — атрибут href. Тогда используйте parse_url а также parse_str чтобы получить параметр строки запроса. Так, например, если вы хотите получить csrfKey:

$doc = new DOMDocument();
$doc->loadHTML($content);
$xpath = new DomXPath($doc);
$results = $xpath->query("//a[contains(@class, 'ipsButton') and contains(@class, 'ipsButton_primary') and contains(@class, 'ipsButton_small')]");
foreach ($results as $result) {
$url = parse_url($result->getAttribute("href"), PHP_URL_QUERY);
parse_str($url, $params);
echo $params['csrfKey'];
}

демонстрация

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]