up
down
Close
架站盒子
Web Development Box
 

PHP 將HTML或JS程式碼轉換為純文字

│ 1108 Views │ PHP
PHP 將HTML或JS程式碼轉換為純文字
PHP 將HTML或JS程式碼轉換為純文字

為何要轉換純文字?

架設網站難免會需要使用到提交表單功能,例如註冊、留言等,然而如果讓使用者可以夾帶HTML或是JavaScript程式碼的話,那可能會發生令人崩潰的事,例如使用者送出的資料帶有網址,但是這個網址可能缺少結尾的</a>,那麼當它送出後就等於替網站寫了一段缺少結尾的連結標籤,進而導致中斷瀏覽器顯示資料。

而假設使用者上傳惡意的程式碼,那麼就可以肆意破壞網站,這樣的行為又稱為跨站腳本攻擊(cross-site scripting attack),因此允許未經處理的外來資料就等於是打開後門,是相當危險的。

轉換純文字的方法

PHP提供了兩種防止這種情況的方法,一種是直接移除HTML或程式碼,只保留了純文字,另一種則是將HTML或程式碼以純文字方式顯示。

第一種方式是只保留文字,這樣可以有效防止輸入未經處理的資料,但有時候會希望網頁能顯示純HTML碼,例如討論程式碼的時候,這時候就適合用第二種方式。

而今天要討論的也是第二種方式,那就是使用htmlentities(),這樣就可以把程式碼變成純文字,瀏覽器就不會去運作它的功能。(為什麼不討論第一種方式是因為第一種方式有缺點,它的函式是strip_tags(),想了解的人可以進一步了解,但不建議使用。)

我們先看原本的樣子,沒有使用htmlentities()會呈現的結果。

PHP程式碼(無htmlentities)

<?php
$str = '<a href="#">這是帶有HTML標籤的文字</a>';
echo $str;
?>

結果:

這是帶有HTML標籤的文字

接著使用htmlentities(),來看看效果。

PHP程式碼(有htmlentities)

<?php
$str = htmlentities('<a href="#">這是帶有HTML標籤的文字</a>');
echo $str;
?>

結果:

<a href="#">這是帶有HTML標籤的文字</a>

htmlentities()也可以用於變數,例如htmlentities($str);

<?php
$str = '<a href="#">這是帶有HTML標籤的文字</a>';
echo htmlentities($str);
?>

htmlentities()原理

htmlentities()的意思是將內容轉換為HTML實體(HTML entities),因此它會將<轉換成&lt;,把>轉換成&gt;&轉換成&amp;"轉換成&quot;,這樣一來<a>就會變成&lt;a&gt;,當瀏覽器收到&lt;a&gt;時就不會當它是HTML標籤,而是HTML實體,上述的特殊字符會自動轉義,印出來的時候就會是<a>了。

反向解碼

如果要反向操作進行解碼的話則使用html_entity_decode()

<?php
$text = "<u>kumo</u>";
$a = htmlentities($text);
$b = html_entity_decode($a);
echo $a; // &lt;b&gt;kumo&lt;/b&gt;
echo $b; // <u>kumo</u>
?>

結果

$a → <u>kumo</u>
$b → kumo

說明

我們原本用htmlentities()把文字變成&lt;b&gt;kumo&lt;/b&gt;,瀏覽器讀取時會轉換特殊符號,於是網頁上會呈現<u>kumo</u>,而使用html_entity_decode()去反解之後就變成<u>kumo</u>,瀏覽器讀取後會認為是HTML標籤,因此網頁上會呈現「kumo」。

以上就是PHP轉換純文字的方法,希望有幫到各位。

延伸閱讀

本文是否對您有幫助?