PHP - Проверить, начинается ли строка с h2-тега, если не взять $ title - PullRequest
0 голосов
/ 03 июня 2018

Я хочу вырезать первый h2-тег текста и поместить его в новую переменную.Там h2-теги также должны быть обрезаны, чтобы получить простой контент h2-тегов.Если в начале текста нет h2-тега (независимо от того, начинается ли он с тега h3 или вообще без тега, а только с обычным текстом), вместо него следует использовать заголовок.

Iнужно это как результат:

   <plainh2>Lenovo Yoga Pro 2 Notebook</plainh2>

Это пример текста (сохраненный как описание в базе данных), который нужно вырезать из:

 <h2>Lenovo Yoga Pro 2 Notebook</h2><h3>The Lenovo ultra-book with as light travelbook</h3>Introducing the ultimate multimode Ultrabook™. The Intel®-inspired YOGA 2 Pro is a PC, a tablet, and more. Its super-high resolution QHD+ multitouch display flips back 360 degrees to offer four different usage modes: Laptop, Tablet, Stand, and Tent. Life has many modes; so should your technology.
    <h2>Lenovo Yoga Pro 2 comes with following features</h2>
    <h3>360-Degree Flip-and-Fold Design</h3>
    A PC when you need it, a tablet when you want it, and more. Easily change between four modes — Laptop, Stand, Tablet, and Tent — while Lenovo Transition automatically switches system settings and locks the keyboard in place. The secret: The Yoga 2 Pro's unique design and touchscreen display allows the screen to flip around 360 degrees, which means you can select the mode you use based on what you choose to Do.
    <h3>other features...</h3>and so on...</text>

Если нет тега h2 прямо наДля начала мне нужно взять $ title.

$ title = "Lenovo Yoga Pro 2 Convertible 13.3" МУЛЬТИМОДНЫЙ УЛЬТРАБУК "для

Мой код сейчас имеет проблему с тем, что он занимает весь тексткогда h2-тег не найден.

Мой код:

        $xml = new SimpleXMLElement('<xml/>');

$title = trim(preg_replace('/\t+/', '', htmlspecialchars($article->getShopTitle())));
$plainh2 = $article->getDescription();
$item = $channel->addChild('item');
$item->addChild('title', htmlspecialchars($title));
preg_match( '#<h2[^>]*>(.*?)</h2>#i', $plainh2, $match );
if(isset($match[1]))
$plainh2=$match[1];
$item->addChild('plainh2', htmlspecialchars($plainh2))

Ваша помощь высоко ценится. Спасибо уже заранее.

1 Ответ

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

Вы устанавливаете $plainh2 на обычное-h2-содержимое, если описание начинается с h2.Но в вашем коде вы пропускаете случай, когда preg_match не соответствует

<?php
// ....
preg_match( '#<h2[^>]*>(.*?)</h2>#i', $plainh2, $match );
if(isset($match[1])){
  //when the description (=$plainh2) starts with h2 set $plainh2 to h2-content
  $plainh2 = htmlspecialchars($match[1]);
}
else{
  //otherwise use $title as $plainh2
  $plainh2 = $title;
}
//$plainh2 is now $title or the catched group from preg_match
$item->addChild('plainh2', $plainh2);
...