hp修改html標簽中的內容php與html如何配合使用php改變htmlphp過濾htmlphp輸出html標簽
PHP刪除HTMl標簽的三種解決方法_流年-CSDN博客_php去除htm...
2017年9月19日 在PHP中可以使用strip_tags函數去除HTML標簽,看下面示例: 復制代碼代碼如下: <?php $str = ‘www<p>dreamdu</p>.com'; echo(htmlspecialchars($str).”<br>”);...
CSDN技術社區
百度快照
php去除HTML標簽實例_php實例_腳本之家
2013年11月6日 在php中要去除字符串中的HTML標簽方法有很多種,最常用的就是使用strip_tags函數一并去了,只保留字符了,還在就是有選擇性的去除了這里要用正則表達式了,下面寫二...
我平時的工作中,偶爾會用 Java 做一些解析HTML的工作。有的時候我需要刪除所有的HTML標簽,只保留純文字內容。這個問題在做過一些爬蟲工作的朋友來說很簡單。下面來說說,我們平時使用到的集中解析的方法。
通過爬蟲爬到的HTML內容,從程序角度來講,就是一個字符串。我們可以對其按照純文本處理的方式來處理。
我們在做文本處理的時候,第一個想到的就是正則表達式。從一個字符串中刪除HTML,對于正則來說,還是比較簡單的。畢竟還是有固定的格式,比如“<...>”。
我們常用的的正則就是 <[^>]> 或者 <.*?> 。
我們在使用正則的時候,需要注意的是正則默認是貪婪匹配。也就是說,正則表達式<.*> 能夠匹配到更多的HTML內容,而不是單個標簽。
現在,讓我們測試一下它是否能從HTML源中刪除標簽。
在我們測試刪除HTML標簽之前,首先讓我們創建一個HTML例子,例如example1.html。
<!DOCTYPE html>
<html>
<head>
<title>這是標題</title>
</head>
<body>
<p>
如果應用程序X沒有啟動,可能的原因是<br/>
1. <a href="https://maven.apache.org">Maven</a>沒有安裝<br/>
2. 磁盤空間不足<br/>
3. 內存不足
</p>
</body>
</html>
現在,讓我們寫一個測試,用String.replaceAll()來刪除HTML標簽。
String html = ... // load example1.html
String result = html.replaceAll("<[^>]`>", "");
System.out.println(result);
如果我們運行這個測試方法,我們會看到結果。
這是標題
如果應用程序X沒有啟動,可能的原因是
1.Maven沒有安裝
2.磁盤空間不足
3.沒有足夠的內存
輸出結果保留了剝離后的HTML的空白處。我們在處理提取的文本時,可以很容易地刪除或跳過這些空行或空白處。
我們剛才已經看到了,通過使用Regex來刪除HTML標簽是非常簡單。但是粗暴的使用這種方法會有很多問題,我們不能預測最終的結果會是怎么樣的。
例如,一個HTML文檔可能有<script>或<style>標簽,而我們可能不希望在結果中出現它們的內容。
此外,<script>、<style>、甚至是<body>標簽中的文本可能包含 <或 >字符。如果是這種情況,我們的正則方法可能會出錯。
現在,讓我們看看另一個例子,比如example2.html。
<!DOCTYPE HTML>
<html>
<head>
<title>這是標題</title>
</head>
<script>
// some js function
</script>
<body>
<p>
如果應用程序X沒有啟動,可能的原因是<br/>
1. <a
id="link"
href="http://maven.apache.org/">
Maven
</a> 沒有安裝<br/>
2. 磁盤空間不足 (<1G) <br/>
3. 內存不足(<64MB)<br/>
</p>
</body>
</html>
現在我們有一個<script>標簽和 <字符在<body>標簽內。
如果我們對example2.html使用同樣的方法,我們會得到如下內容。
這是標題
// some js function
如果應用程序X沒有啟動,可能的原因是
1.
Maven
沒有安裝
2. 磁盤空間不足 (
3. 內存不足(
顯然,由于"<"字符的存在,我們丟失了一些文本。所以正則在處理文本的時候并不是萬能的。我們可以使用一些 HTML 解析器來做這些比較復雜的場景。
Jsoup 是一個流行的HTML解析庫,如果想要從一個HTML文檔中提取文本,我們可以簡單地調用Jsoup.parse(htmlString).text()。
在項目中使用的時候,我們首先需要添加 jsoup 的依賴庫,我們這里就通過maven的方式引入。
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
我們用 example2.html來測試一下。
String html = ... // load example2.html
System.out.println(Jsoup.parse(html).text());
如果我們讓這個方法運行,它就會打印出來。
這是標題 如果應用程序X沒有啟動,可能的原因是 1.Maven沒有安裝 2.沒有足夠的(<1G)磁盤空間 3.沒有足夠的(<64MB)內存
從輸出結果可知,Jsoup已經成功地從HTML文檔中提取了文本。另外,<script>元素中的文本已經被忽略了。
此外,默認情況下,Jsoup會刪除所有的文本格式和空白處,比如換行符。
HTMLCleaner 也是一個HTML解析庫。
首先,我們需要在pom.xml中添加HTMLCleaner 依賴。
<dependency>
<groupId>net.sourceforge.htmlcleaner</groupId>
<artifactId>htmlcleaner</artifactId>
<version>2.25</version>
</dependency>
我們可以設置[各種參數](http://htmlcleaner.sourceforge.net/parameters.php)來控制HTMLCleaner的解析行為。我們在這里使用HTMLCleaner在解析example2.html時跳過<script>元素。
String html = ... // load example2.html
CleanerProperties props = new CleanerProperties();
props.setPruneTags("script");
String result = new HtmlCleaner(props).clean(html).getText().toString();
System.out.println(result);
運行一下,HTMLCleaner將產生這樣的輸出。
這是標題
如果應用程序X沒有啟動,可能的原因是:
1.Maven沒有安裝
2.沒有足夠的(<1G)磁盤空間
3.內存不足(<64MB)
我們可以看到,<script>元素中的內容被忽略了, <br/>標簽轉換為提取的文本中的換行符。另外, HTMLCleaner 保留了HTML的空白內容。
在這篇文章中,我們學習了幾種去除HTML的方法,我們需要注意的是,正則在文本處理的過程中并不是萬能的。
HTML標簽相關的字符串格式化
string nl2br ( string $string )
nl2br() 就是將\n 替換成 <br> //javascript對\n才能夠執行換行,對</br>是不能執行換行
htmlspecialchars() 把一些預定義的字符轉換為 HTML 實體。
string htmlspecialchars(string,quotestyle,[character-set])
轉換以下字符及對應的實體
& (和號) 成為 &
" (雙引號) 成為 "
' (單引號) 成為 '
< (小于) 成為 <
> (大于) 成為 >
第二個參數: ENT_COMPAT 只轉換雙引號, 保留單引號, 為默認值 compat: 兼容性
ENT_QUOTES 同時轉換兩種引號 quotes: 引號
ENT_NOQUOTES 不對引號進行轉換
<html>
<body>
<?php
$str = "John & \" 'Adams'";
echo htmlspecialchars($str, ENT_COMPAT);
echo "<br />";
echo htmlspecialchars($str, ENT_QUOTES);
echo "<br />";
echo htmlspecialchars($str, ENT_NOQUOTES);
?>
</body>
</html>
輸出結果:John & " 'Adams'
John & " 'Adams'
John & " 'Adams'
htmlentities() 可以將所有的非ASCII碼字符轉換為對應的實體代碼;除字母、數字、\外, 漢字和鍵盤上其他字符都轉換
<?php
$str = "A 'quote' \" is <b>bold</b>" ;
echo htmlentities ( $str ); // 輸出后源代碼: A 'quote' is <b>bold</b>
echo htmlentities ( $str , ENT_QUOTES ); // 輸出后源代碼: A 'quote' is <b>bold</b>
?>
返回的結果:A 'quote' "is <b>bold</b>
A 'quote' "is <b>bold</b>
注意: htmlspecialchars()和htmlentities作用直接輸出HTML腳本
htmlspecialchars()和htmlentities()函數對于轉義字符"\"處理,不會轉義實體代碼,要么當轉義字符對待,要么原樣輸出;
PHP中htmlentities和htmlspecialchars的區別
這兩個函數的功能都是轉換字符為HTML字符編碼, 特別是url和代碼字符串。防止字符標記被瀏覽器執行。
使用中文時沒什么區別, 但htmlentities會格式化中文字符使得中文輸入是亂碼。
htmlentities轉換所有的html標記, htmlspecialchars只格式化& ' " < 和 > 這幾個特殊符號
addslashes() 在指定的預定義字符前添加反斜杠。
這些預定義字符是:單引號 (') 雙引號 (") 反斜杠 (\) NULL字符(\x00)
提示:該函數可用于為存儲在數據庫中的字符串以及數據庫查詢語句準備合適的字符串。
注釋:默認情況下,PHP 指令 magic_quotes_gpc 為 on,對所有的 GET、POST 和 COOKIE數據自動運行 addslashes()。
不要對已經被magic_quotes_gpc轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義。
遇到這種情況時可以使用函數 get_magic_quotes_gpc() 進行檢測。(如:$c=(!get_magic_quotes_gpc())?addslashes($c):$c;)
在本例中,我們要向字符串中的預定義字符添加反斜杠:
<?php
$str = "Who's John Adams?";
echo $str . " This is not safe in a database query.<br />";
echo addslashes($str) . " This is safe in a database query.";
?>
輸出:
Who's John Adams? This is not safe in a database query.
Who\'s John Adams? This is safe in a database query.
<?php
header("Content-type:text/html; charset=utf-8");
$str = "wo are \x0a studying \x00 php";
echo $str;
echo "<br>";
echo addslashes($str);
?>
輸出:
wo are studying php
wo are studying >wo are studying \0 php< php
stripslashes() 刪除反斜線("\")
在提交的表單數據中 ' " \ 等字符前被自動加上一個\ ,這是配置文件php.ini中選項magic_quotes_gpc在起作用,
默認是打開的,如果不處理則將數據保存到數據庫時,有可能會被數據庫誤當成控制符號而引起錯誤。
通常htmlspecialchars()和stripslashes()函數復合的方式,聯合處理表單中的提交的數據htmlspecialchars(stripslashes())
strip_tags()
string strip_tags ( string $str [, string $allowable_tags ] )
剝去 HTML、XML 以及 PHP 的標簽。
<?php
echo strip_tags("Hello <b><i>world!</i></b>","<b>");
?>
輸出結果:Hello world!
實例:
<?php
$str = "<b>webserver;</b> & \ 'Linux' & Apache";
echo "$str"; //直接輸出
echo "<br/>";
echo htmlspecialchars($str,ENT_COMPAT); //只轉換雙引號,為默認參數
echo "<br />";
echo htmlspecialchars($str,ENT_NOQUOTES); //不對引號進行轉換
echo "<br />";
echo htmlspecialchars($str,ENT_QUOTES); //同時轉換單引號和雙引號
echo "<br />";
echo htmlentities($str); //將所有的非ASCII碼字符轉換為對應的實體代碼
echo "<br />";
echo addslashes($str); //將" ' \ 字符前添加反斜線
echo "<br />";
echo stripslashes($str); //刪除反斜線
echo "<br />";
echo strip_tags($str); //刪除<html>標記
?>
輸出結果:
webserver; & \ 'Linux' & Apache
*請認真填寫需求信息,我們會在24小時內與您取得聯系。