簡體   English   中英

如何從RSS feed描述標簽中刪除圖像和文本?

[英]How to remove images and text from RSS feed description tag?

我從一些RSS feed網站上獲得了描述,其中一些描述包含要刪除的圖像和特定文本。

獲取提要的代碼:

$rss = simplexml_load_file($website);
foreach ($rss->channel->item as $item) {
    $description = (string)$item->descritpion;
}

這些是我得到的不同格式:

<description><![CDATA[
    <p> //Post Description </p>
    <p>The post <a rel="nofollow" href="">
        //Post Title.</a> appeared first on 
        <a rel="nofollow" href="">//Feed Website.</a>.
    </p>
]]></description>
_________________________________________________________________
<description><![CDATA[
    <div>
        <strong>//Some Text.</strong>
    </div>
    <div>
        &nbsp;
    </div>
    <div>//Some Text.</div>
    <div>
        <img alt="" src="" style="width: 640px; height: 427px;" />
    </div>
]]></description>
_______________________________________________________________
<description>
    &lt;img style="margin:0 1em 1em 0;" align="left" src=""/&gt;
    „//Some Text. 
</description>

刪除圖像:

$description = (string)strip_tags($item->description);

文本為“帖子(帖子標題)首先出現在(網站)上”。

要刪除該文本,我使用:

if (strpos($description, 'appeared first')) {
    $siteNames = array('a.com', 'b.com', 'c.com');
    foreach ($siteNames as $siteName) {
        if(strpos($description, $siteName)){
            $appeared = 'The post '.$item->title.' appeared first on '.$siteName;
            $description = str_replace($appeared, '', $description);
        }

    }
}

因此,例如,如果描述包含:

 <p>The post 
    <a rel="nofollow" href="http://a.com/what-is-php">What is PHP.</a> 
    appeared first on 
    <a rel="nofollow" href="http://a.com">a.com.</a>.
</p>

然后,應刪除該文本。

然后,我使用strip_tags($item->description) ,沒有顯示圖像。

但是,當我使用代碼刪除字符串時,它並不能與所有描述一起使用,其中有些仍然具有字符串。

更新:

<description><![CDATA[
    <p>Við vorum að fá inn til okkar forfallaholl í Laugardalsá á best tíma. Annarsvegar er um að ræða hollið 18-21. júlí og síðan hollið 24-27. júlí. Bæði eru hollin á frábærum tíma í ánn. Þó svo um 3ja daga holl sé að ræða, er að hægt að skoða staka daga eða 1 1/2 eða 2
    </p>
    <p>The post <a rel="nofollow" href="https://a.com/post-title/">Laugardalsá &#8211; forfallaholl á besta tíma</a> appeared first on <a rel="nofollow" href="https://a.com">a.com</a>.</p>
]]></description>

代碼:( 演示

$xml = '<![CDATA[
    <p>Við vorum að fá inn til okkar forfallaholl í Laugardalsá á best tíma. Annarsvegar er um að ræða hollið 18-21. júlí og síðan hollið 24-27. júlí. Bæði eru hollin á frábærum tíma í ánn. Þó svo um 3ja daga holl sé að ræða, er að hægt að skoða staka daga eða 1 1/2 eða 2
    </p>
    <p>The post <a rel="nofollow" href="https://a.com/post-title/">Laugardalsá &#8211; forfallaholl á besta tíma</a> appeared first on <a rel="nofollow" href="https://a.com">a.com</a>.</p>
]]>';

$finds = [
    '~<p>The post <a rel="nofollow" href="https?://[a-z]+\.com[^"]*">.*?</a> appeared first on <a rel="nofollow" href="https?://[a-z]+\.com[^"]*">.*?</a>\.</p>~iu',
    '~^<!\[CDATA\[~',
    '~\]\]>$~'
];

var_export(trim(strip_tags(preg_replace($finds, '', $xml))));

輸出:

'Við vorum að fá inn til okkar forfallaholl í Laugardalsá á best tíma. Annarsvegar er um að ræða hollið 18-21. júlí og síðan hollið 24-27. júlí. Bæði eru hollin á frábærum tíma í ánn. Þó svo um 3ja daga holl sé að ræða, er að hægt að skoða staka daga eða 1 1/2 eða 2'

我希望這將在很大程度上按所需方式處理您的數據。 第一個正則表達式模式肯定是最毛的(請參閱鏈接以獲取模式說明)。 您將需要調整[abc]\\.com以適合您的需要-可能會做類似(?:test\\.com|example\\.net|sample\\.co\\.uk) 直到獲得“正確”的結果,才將一些輸入數據輸入regex101並不斷調整模式,直到它起作用為止。

第二和第三種模式只是清除文本包裝程序。 雖然第2個不是真正必需的,因為strip_tags()會清除該子字符串,但第3個是至關重要的,因為strip_tags()將留下一個懸垂的]]>

第一種模式不區分大小寫( i )和耐Unicode( u ),以獲得最佳結果。

^$是字符串定界符的開始和結尾。 如果它們不適合您的實際數據,則可以將其刪除。 這些步驟僅是嘗試“刪除”任何不需要的殘留子字符串。 trim()調用肯定是我要包括的東西,以便存儲的數據盡可能干凈。

如果要刪除的特定<p>標記子字符串嵌套在兩個要保留的子字符串之間,則您可能希望添加另一個模式以將多個\\s{2,}壓縮為單個空格,或者可以在\\s*處寫上我的第一個模式的結尾是捕獲尾隨空白。 只有你會知道這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM