При выполнении Следующий код ، Мой скрипт php не запускается и не отображает сообщение об ошибке.

<?php
    $content = '<p>Hi </p> <p>The post <a rel="nofollow" href="http://sample.com/article/2016/09/05/%d8%a7%d9%84-%d8%ac%db%8c-%d9%82%d8%b5%d8%af-%d8%af%d8%a7%d8%b1%d8%af-%d8%b3%d8%b1%d9%85%d8%a7%db%8c%d9%87-%da%af%d8%b0%d8%a7%d8%b1%db%8c-%d8%b9%d8%b8%db%8c%d9%85%db%8c-%d8%b1%d8%a7-%d8%af%d8%b1/" ><b>ال جی قصد دارد سرمایه گذاری عظیمی را در حوزه رباتیک انجام دهد</b></a> appeared first on <a rel="nofollow" href="http://sample.com" ><b>بهنام</b></a>.</p>';
    $content = preg_replace('/(The post)+(.)+(appeared first)+(.)+(\.)*/i', '', $content);
    echo $content;

Я хочу удалить все из «сообщения» до конца строки переменной содержимого с точкой.

Моя цель - динамически удалить

The post <a rel="nofollow" href=""><b>ال جی قصد دارد سرمایه گذاری عظیمی را در حوزه رباتیک انجام دهد</b></a> appeared first on <a rel="nofollow" href="http://sample.com" ><b>بهنام</b></a>. 

От конца контента (описание RSS).

Я думаю, что эта проблема связана с тем, что значение $ content является unicode (персидским).

При удалении href ссылки из переменной содержимого Output is true.

2
Behnam Rasouli 5 Сен 2016 в 08:59

4 ответа

Используйте гораздо более совершенный подход DOM:

<?php

$data = <<<DATA
<p>Hi </p> <p>The post <a rel="nofollow" href="http://sample.com/article/2016/09/05/%d8%a7%d9%84-%d8%ac%db%8c-%d9%82%d8%b5%d8%af-%d8%af%d8%a7%d8%b1%d8%af-%d8%b3%d8%b1%d9%85%d8%a7%db%8c%d9%87-%da%af%d8%b0%d8%a7%d8%b1%db%8c-%d8%b9%d8%b8%db%8c%d9%85%db%8c-%d8%b1%d8%a7-%d8%af%d8%b1/" ><b>ال جی قصد دارد سرمایه گذاری عظیمی را در حوزه رباتیک انجام دهد</b></a> appeared first on <a rel="nofollow" href="http://sample.com" ><b>بهنام</b></a>.</p>
DATA;

$dom = new DOMDOcument();
$dom->loadHTML($data, LIBXML_HTML_NOIMPLIED); 
$dom->removeChild($dom->doctype);

$xpath = new DOMXPath($dom);

$elements_to_be_removed = $xpath->query("//p[starts-with(text(), 'The post ')]");
foreach ($elements_to_be_removed as $element) {
    $element->parentNode->removeChild($element);
}

// just to check
echo $dom->saveHTML();
# <p>Hi </p>
?>

Это удалит все p, где текст начинается с "The post".

0
Jan 5 Сен 2016 в 07:01

Пожалуйста, проверьте, подходит ли вам этот подход.

$content = preg_replace('|<p>The post(.)*|', '', $content);

Мое первое решение:

$contentToReplace[] = '/The post/';
$contentToReplace[] = '/appeared first on/';

$content = preg_replace($contentToReplace, '', $content);
1
Grzegorz B. 5 Сен 2016 в 07:38

$content = preg_replace('/The post(.)*/i', '', $content);

Хватит того, что вы хотите. . означает все, кроме новой строки, поэтому вам не понадобится вся эта лишняя ерунда.

0
A. L 5 Сен 2016 в 06:58

Пожалуйста попробуйте

$content = '<p>Hi </p> <p>The post <a rel="nofollow" href=""><b>ال جی قصد دارد سرمایه گذاری عظیمی را در حوزه رباتیک انجام دهد</b></a> appeared first on <a rel="nofollow" href="http://sample.com" ><b>بهنام</b></a>.</p>';
$result = preg_replace(
          array('/The post/', '/appeared first on/'),
          array('', ''),
          $content
);
echo $result;
1
Talha Malik 5 Сен 2016 в 06:20