Фильтрация содержимого HTML по типу элемента в PHP - PullRequest
0 голосов
/ 07 декабря 2018

Скажем, у меня есть переменная, содержащая html:

<?php 
$content = "<h3>Transition movement</h3><p>It's fun and will make you more resilient.</p>";
?>

Могу ли я "отфильтровать" ее, чтобы я мог повторить заголовок где-то и абзац в другом месте, как показано ниже?

<div class="big-purple"><?php echo $content_title; ?></div>
<div class="side-bar"><?php echo $content_paragraph; ?></div>

В некотором смысле я хотел бы получить доступ к элементам DOM с помощью JavaScript, только на стороне сервера, прежде чем он будет загружен на странице.Я спрашиваю об этом, потому что я получаю контент из одного текстового поля в Wordpress, и мне нужно поместить контент в разные части моего внешнего интерфейса.

Ответы [ 3 ]

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

Если бы я хотел это сделать, я бы использовал больше переменных:

<?php 
   $headline = "<h3>Transition movement</h3>";
   $paragraph = "<p>It's fun and will make you more resilient.</p>";
   $fullContent = $headline . $paragraph;
?>

и позже:

<div class="big-purple"><?php echo $headline; ?></div>
<div class="side-bar"><?php echo $paragraph; ?></div>

Если вы не можете сохранить его в двух переменных, то разбейтераньше, но это гораздо менее читабельно:

$content = explode("</h3>", "<h3>Transition movement</h3><p>It's fun and will make you more resilient.</p>");
0 голосов
/ 07 декабря 2018

Вы можете сделать это следующим образом:

<?php
    $content = '<h3>Transition movement</h3><p>It\'s fun and will make you more resilient.</p>';

    preg_match_all(
        '/\<\w[^<>]*?\>([^<>]+?\<\/\w+?\>)?|\<\/\w+?\>/i',
        $content,
        $matches
    );

    $html = $matches[0];

    $heading = $html[0];
    $p = $html[1];
?>

<div><?php echo $heading; ?></div>
<div><?php echo $p; ?></div>

preg_match будет соответствовать всем < whatever html tag > и разбить его на массив.Он сохраняет его в первом индексе (следовательно, $html = $matches[0]), поэтому просто используйте его, а затем получите теги индивидуально.

Потенциальные бонусные баллы за преф.

function getHtmlTags($html)
{
    preg_match_all(
        '/\<\w[^<>]*?\>([^<>]+?\<\/\w+?\>)?|\<\/\w+?\>/i',
        $html,
        $matches
    );

    return $matches[0];
}

$html = getHtmlTags($content);
0 голосов
/ 07 декабря 2018

Как насчет

$content = explode("</h3>", "<h3>Transition movement</h3><p>It's fun and will make you more resilient.</p>");//Split at end of h3

И:

<div class="big-purple"><?php echo $content[0]; ?></div>
<div class="side-bar"><?php echo $content[1]; ?></div>

Я не рекомендую так кодировать, но это работает, если это то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...