2016-11-04 41 views
1

一個字符串包含一些cite標籤的文字和鏈接如何使用php在每個「cite」標籤中刪除「a」標籤?

<cite></cite> 

一部開拓創新:

<cite>Quote from <a href="/page.php" class="link">Testuser » 29.09.2016 15:08</a>:</cite> 

結果:

<cite>Quote from Testuser » 29.09.2016 15:08:</cite> 

什麼是刪除鏈接的最快方法並保留文字,只有在引用之間AGS?

謝謝

+0

更多explantion:文字來自數據庫。它不可能將文本內容作爲字符串引用。引用之前和之後也是文本和HTML,但只有在引用內部應該被剝離 – labu77

回答

0

解析HTML和使用DOM是最好的解決方案,但因爲如果你想要最快的方式,你可以使用正則表達式。我使用preg_replace_callback()找到cite標籤並迭代選定的標籤。在回調函數中,使用strip_tags()刪除所選cite中的HTML標記。

$newStr = preg_replace_callback("/<cite>.*<\/cite>/i", function($matches){ 
    return strip_tags($matches[0], "<cite>"); 
}, $str); 

檢查結果demo

+0

輸出是exaclty我想要但我有一個錯誤消息「意外的T_FUNCTION」。看來,PHP版本是老的,有沒有其他的方式來寫它?非常感謝 – labu77

+0

@ labu77這是因爲在舊版本的php中,你不能在'preg_replace_callback()'參數中使用'function'。您需要定義函數並使用它的名稱作爲參數。請參閱https://3v4l.org/pbB6S – Mohammad

+0

非常感謝您爲您提供不同解決方案所需的時間和精力。作品像一個魅力 – labu77

0

最快的方法是:

$s = '<cite>Quote from <a href="/page.php" class="link">Testuser » 29.09.2016 15:08</a>:</cite>'; 
$s = '<cite>' . strip_tags($s) . '</cite>'; 
+0

如果文本沒有任何其他字符串,除了''以外,代碼工作。但有問題說,*字符串包含一些「引用」標籤* – Mohammad

+0

我不能得到引用的字符串。它從數據庫的全文更多然後引用 – labu77

0

快捷的方式我能想到的

$string = '<cite>Quote from <a href="/page.php" class="link">Testuser » 29.09.2016 15:08</a>:</cite>'; 

$string = '<cite>'.strip_tags($string).'</cite>'; 
+0

我不能得到的字符串內引用。其數據庫中的全文 – labu77

1

請檢查下面的代碼:

<?php 
//Function to fetch text from between certain tag 
//In our case it will be used to fetch text from <cite></cite> tags. 
function everything_in_tags($string, $tagname) 
{ 
    $pattern = "#<\s*?$tagname\b[^>]*>(.*?)</$tagname\b[^>]*>#s"; 
    preg_match($pattern, $string, $matches); 
    return $matches[1]; 
} 
//Use srtip_tags function to remove a tag and fetch text. 
echo '<cite>'.strip_tags(everything_in_tags('<cite>Quote from <a href="/page.php" class="link">Testuser >> 29.09.2016 15:08</a>:</cite>', 'cite')).'</cite>'; 

?> 
+0

當引用是html文本之前或之後,其不可見 – labu77

+0

好吧,您可以將引用打開和關閉標記添加到輸出中。你可以在我更新的答案中查看它。 –

+0

非常感謝您的幫助。 – labu77

0

你能做到這一點,以及

php -r 'print sprintf("%s%s%s", "<cite>", preg_replace("!<[^>]+>!","", "<cite>Quote from <a href=\"/page.php\" class=\"link\">Testuser » 29.09.2016 15:08</a>:</cite>"), "</cite>");'