Я хочу вырезать первый 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))
Ваша помощь высоко ценится.
Спасибо уже заранее.
Ты устанавливаешь $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);
Других решений пока нет …