simplexml — проверяет, начинается ли строка с h2-тега, если не принимает $ title

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

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

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

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

0

Решение

Ты устанавливаешь $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);
0

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

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

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