Как сделать это коротким PHP? - PullRequest
0 голосов
/ 09 июня 2018

Я сделал такой код и как сделать его коротким?Я имею в виду, я не хочу использовать foreach все время для регулярных выражений, спасибо.

<?php
  preg_match_all('#<article [^>]*>(.*?)<\/article>#sim', $content, $article);

  foreach($article[1] as $posts) {
    preg_match_all('#<img class="images" [^>]*>#si', $posts, $matches);
    $img[] = $matches[0];
  }

  $result = array_filter($img);

  foreach($result as $res) {
    preg_match_all('#src="(.*?)" data-highres="(.*?)"#si', $res[0], $out);
    $final[] = array(
      'src' => $proxy.base64_encode($out[1][0]),
      'highres' => $proxy.base64_encode($out[2][0])
    );
?>

1 Ответ

0 голосов
/ 09 июня 2018

Если вам нужен надежный код (который всегда работает), избегайте синтаксического анализа html с помощью регулярных выражений, потому что html более сложный и непредсказуемый, чем вы думаете.Вместо этого используйте встроенные инструменты, доступные для этих конкретных задач, например, классы DOMxxx.

$dom = new DOMDocument;
$state = libxml_use_internal_errors(true);
$dom->loadHTML($content);
libxml_use_internal_errors($state);
$xp = new DOMXPath($dom);

$imgList = $xp->query('//article//img[@src][@data-highres]');

foreach($imgList as $img) {
    $final[] = [
        'src' => $proxy.base64_encode($img->getAttribute('src')),
        'highres' => $proxy.base64_encode($img->getAttribute('data-highres'))
    ];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...