[英]How can I strip HTML in a string using Perl?
有沒有比這更容易使用Perl從字符串中刪除HTML?
$Error_Msg =~ s|<b>||ig;
$Error_Msg =~ s|</b>||ig;
$Error_Msg =~ s|<h1>||ig;
$Error_Msg =~ s|</h1>||ig;
$Error_Msg =~ s|<br>||ig;
我會同時修飾一個精簡的正則表達式,例如:
$Error_Msg =~ s|</?[b|h1|br]>||ig;
是否存在從字符串中刪除任何/所有HTML的現有Perl函數,即使我只需要粗體,h1標題和br剝離?
假設代碼是有效的HTML(沒有雜散的<或>運算符)
$htmlCode =~ s|<.+?>||g;
如果你只需要刪除粗體,h1和br
$htmlCode =~ s#</?(?:b|h1|br)\b.*?>##g
您可能想要考慮HTML :: Strip模塊
最正確的方法(盡管不是最快)是使用CPAN的HTML :: Parser。 另一種最正確的方法是使用HTML :: FormatText,它不僅可以刪除HTML,還可以嘗試對生成的純文本進行一些簡單的格式化。
許多人嘗試一種簡單的正則表達式方法,比如s /<.*?> // g,但在許多情況下失敗,因為標簽可能會在換行符上繼續,它們可能包含帶引號的尖括號,或HTML注釋可能出席。 此外,人們忘記轉換實體 - 例如<。
這是一個“簡單的”方法,適用於大多數文件:
#!/usr/bin/perl -p0777
s/<(?:[^>'"]*|(['"]).*?\1)*>//gs
如果您需要更完整的解決方案,請參閱http://www.cpan.org/authors/id/T/TO/TOMC/scripts/striphtml.gz中的3階段striphtml程序。
以下是一些在選擇解決方案時應該考慮的棘手案例:
<IMG SRC = "foo.gif" ALT = "A > B">
<IMG SRC = "foo.gif"
ALT = "A > B">
<!-- <A comment> -->
<script>if (a<b && a>c)</script>
<# Just data #>
<![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
如果HTML注釋包含其他標記,那么這些解決方案也會破壞文本,如下所示:
<!-- This section commented out.
<B>You can't see me!</B>
-->
您一定要看一下HTML :: Restrict ,它允許您去除或限制允許的HTML標記。 剝離所有HTML標記的最小示例:
use HTML::Restrict;
my $hr = HTML::Restrict->new();
my $processed = $hr->process('<b>i am bold</b>'); # returns 'i am bold'
我建議遠離HTML :: Strip,因為它破壞了utf8編碼 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.