2024 年 PHP 日本研討會

htmlspecialchars

(PHP 4, PHP 5, PHP 7, PHP 8)

htmlspecialchars將特殊字元轉換為 HTML 實體

描述

htmlspecialchars(
    string $string,
    int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
    ?string $encoding = null,
    bool $double_encode = true
): string

某些字元在 HTML 中具有特殊意義,如果它們要保留其含義,則應以 HTML 實體表示。此函式會傳回已進行這些轉換的字串。如果您需要轉換所有具有關聯的命名實體的輸入子字串,請改用 htmlentities()

如果傳遞給此函式的輸入字串與最終文件共用相同的字元集,則此函式足以準備輸入以包含在 HTML 文件的大多數上下文中。但是,如果輸入可以表示未在最終文件字元集中編碼的字元,並且您希望保留這些字元(作為數字或命名實體),則此函式和 htmlentities()(僅編碼具有命名實體等效項的子字串)可能不足。您可能需要改用 mb_encode_numericentity()

執行的轉換
字元 替換
& (和號) &
" (雙引號) ",除非設定了 ENT_NOQUOTES
' (單引號) '(適用於 ENT_HTML401)或 '(適用於 ENT_XML1ENT_XHTMLENT_HTML5),但僅在設定了 ENT_QUOTES
< (小於) &lt;
> (大於) &gt;

參數

string

正在轉換的 字串

flags

一個或多個下列旗標的位元遮罩,用於指定如何處理引號、無效的程式碼單元序列和使用的文件類型。預設值為 ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401

可用的 flags 常數
常數名稱 描述
ENT_COMPAT 將轉換雙引號並保持單引號不變。
ENT_QUOTES 將轉換雙引號和單引號。
ENT_NOQUOTES 將保持雙引號和單引號不轉換。
ENT_IGNORE 靜默捨棄無效的程式碼單元序列,而不是傳回空字串。不建議使用此旗標,因為它» 可能會有安全性影響
ENT_SUBSTITUTE 將無效的程式碼單元序列替換為 Unicode 替換字元 U+FFFD (UTF-8) 或 &#xFFFD; (其他情況),而不是傳回空字串。
ENT_DISALLOWED 將給定文件類型的無效程式碼點替換為 Unicode 替換字元 U+FFFD (UTF-8) 或 &#xFFFD; (其他情況),而不是將它們保留原樣。例如,這可能有用於確保具有嵌入式外部內容的 XML 文件的格式正確性。
ENT_HTML401 將程式碼視為 HTML 4.01 處理。
ENT_XML1 將程式碼視為 XML 1 處理。
ENT_XHTML 將程式碼視為 XHTML 處理。
ENT_HTML5 將程式碼視為 HTML 5 處理。

encoding

一個可選引數,用於定義轉換字元時使用的編碼。

如果省略,encoding 的預設值為 default_charset 組態選項的值。

雖然此引數在技術上是可選的,但如果 default_charset 組態選項可能為給定輸入設定不正確的值,強烈建議您為程式碼指定正確的值。

就此函式的目的而言,編碼 ISO-8859-1ISO-8859-15UTF-8cp866cp1251cp1252KOI8-R 實際上是等效的,前提是 string 本身對於編碼而言是有效的,因為受 htmlspecialchars() 影響的字元在所有這些編碼中都佔據相同的位置。

支援下列字元集

支援的字元集
字元集 別名 描述
ISO-8859-1 ISO8859-1 西歐,Latin-1。
ISO-8859-5 ISO8859-5 很少使用的西里爾字元集 (拉丁文/西里爾文)。
ISO-8859-15 ISO8859-15 西歐,Latin-9。新增了歐元符號、Latin-1 (ISO-8859-1) 中缺少的法語和芬蘭字母。
UTF-8   與 ASCII 相容的多位元組 8 位元 Unicode。
cp866 ibm866, 866 DOS 特定的西里爾字元集。
cp1251 Windows-1251, win-1251, 1251 Windows 特定的西里爾字元集。
cp1252 Windows-1252, 1252 Windows 特定西歐字元集。
KOI8-R koi8-ru, koi8r 俄文。
BIG5 950 繁體中文,主要在台灣使用。
GB2312 936 簡體中文,國家標準字元集。
BIG5-HKSCS   具有香港擴充功能的 Big5,繁體中文。
Shift_JIS SJIS, SJIS-win, cp932, 932 日文
EUC-JP EUCJP, eucJP-win 日文
MacRoman   Mac OS 使用的字元集。
''   空字串會啟動從指令碼編碼 (Zend 多位元組)、default_charset 和目前地區設定 (請參閱 nl_langinfo()setlocale()) 的偵測,依此順序。不建議使用。

注意 任何其他字元集都不會被辨識。將改用預設編碼,並發出警告。

double_encode

double_encode 關閉時,PHP 不會編碼現有的 HTML 實體,預設值為轉換所有內容。

傳回值

轉換後的 字串

如果輸入 string 在給定的 encoding 中包含無效的程式碼單元序列,則會傳回空字串,除非設定了 ENT_IGNOREENT_SUBSTITUTE 旗標。

變更記錄

版本 描述
8.1.0 flagsENT_COMPAT 變更為 ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401

範例

範例 1 htmlspecialchars() 範例

<?php
$new
= htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo
$new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>

附註

注意:

請注意,此函式不會翻譯超出上述列出的任何內容。如需完整的實體轉換,請參閱 htmlentities()

注意:

如果 flags 值模稜兩可,則適用下列規則

參見

新增註解

使用者提供的註解 19 則註解

72
Dave
11 年前
在 PHP 5.4 中,他們將預設編碼從 "ISO-8859-1" 更改為 "UTF-8"。所以如果你從 htmlspecialchars 或 htmlentities 取得 null

而你只設定了
<?php
echo htmlspecialchars($string);
echo
htmlentities($string);
?>

你可以這樣修正它
<?php
echo htmlspecialchars($string, ENT_COMPAT,'ISO-8859-1', true);
echo
htmlentities($string, ENT_COMPAT,'ISO-8859-1', true);
?>

在 Linux 上,你可以找到你需要修正的腳本,方法是

grep -Rl "htmlspecialchars\\|htmlentities" /path/to/php/scripts/
45
Mike Robinson
11 年前
不幸的是,據我所知,PHP 開發人員沒有提供任何方法來設定 htmlspecialchars() 或 htmlentities() 使用的預設編碼,即使他們在 PHP 5.4 中更改了預設編碼(*為 PHP 開發人員鼓掌*)。為了節省大家嘗試的時間,這樣做無效

<?php
ini_set
('default_charset', $charset); // 無效。
?>

不幸的是,為了不必每次都明確提供第二和第三個參數 (這非常繁瑣),唯一的方法是編寫自己的函數作為封裝器

<?php
define
('CHARSET', 'ISO-8859-1');
define('REPLACE_FLAGS', ENT_COMPAT | ENT_XHTML);

function
html($string) {
return
htmlspecialchars($string, REPLACE_FLAGS, CHARSET);
}

echo
html("ñ"); // 有效
?>

你可以對 htmlentities() 做同樣的事情
23
Thomasvdbulk at gmail dot com
13 年前
我搜尋了一段時間,希望能找到一個可以分辨 html 標籤和文字中單純 < 和 > 區別的腳本,
原因是,我從資料庫接收文字,
這些文字是透過 html 表單輸入的,其中包含文字和 html 標籤,
文字可以包含 < 和 >,標籤也是如此,
使用 htmlspecialchars 你可以驗證你的文字以符合 XHTML,
但你也會更改標籤,例如 <b> 為 &lt;b&gt;,
所以我需要一個可以分辨這兩者差異的腳本...
但我找不到,所以我自己做了一個,
我沒有完全測試它,但我測試的部分運作完美!
僅供那些正在搜尋類似東西的人參考,
它可能看起來很大,可以用更簡單的方式完成,但它對我來說有效,所以我很高興。

<?php
function fixtags($text){
$text = htmlspecialchars($text);
$text = preg_replace("/=/", "=\"\"", $text);
$text = preg_replace("/&quot;/", "&quot;\"", $text);
$tags = "/&lt;(\/|)(\w*)(\ |)(\w*)([\\\=]*)(?|(\")\"&quot;\"|)(?|(.*)?&quot;(\")|)([\ ]?)(\/|)&gt;/i";
$replacement = "<$1$2$3$4$5$6$7$8$9$10>";
$text = preg_replace($tags, $replacement, $text);
$text = preg_replace("/=\"\"/", "=", $text);
return
$text;
}
?>

一個範例

<?php
$string
= "
this is smaller < than this<br />
this is greater > than this<br />
this is the same = as this<br />
<a href=\"http://www.example.com/example.php?test=test\">This is a link</a><br />
<b>Bold</b> <i>italic</i> etc..."
;
echo
fixtags($string);
?>

將會輸出
this is smaller &lt; than this<br />
this is greater &gt; than this<br />
this is the same = as this<br />
<a href="http://www.example.com/example.php?test=test">This is a link</a><br />
<b>Bold</b> <i>italic</i> etc...

我希望這有幫助!!
16
Kenneth Kin Lum
16 年前
如果你的目標只是保護你的頁面免受跨網站腳本 (XSS) 攻擊,或只是在網頁上顯示 HTML 標籤 (例如,在頁面上顯示 <body>),那麼使用 htmlspecialchars() 就已足夠,並且比使用 htmlentities() 更好。一個小的重點是 htmlspecialchars() 比 htmlentities() 快。更重要的一點是,當我們在程式碼中使用 htmlspecialchars($s) 時,它會自動與 UTF-8 字串相容。否則,如果我們使用 htmlentities($s),並且字串 $s 中恰好有 UTF-8 編碼的外文字元,那麼 htmlentities() 會將其搞砸,因為它會將字串中 0x80 到 0xFF 的位元組修改為 &eacute; 之類的實體。(除非你特別為 htmlentities() 提供第二個參數和第三個參數,且第三個參數為 "UTF-8")。

htmlspecialchars($s) 已經可以使用 UTF-8 字串的原因是,它會將範圍在 0x00 到 0x7F 的位元組更改為 &lt; 等,同時保留範圍在 0x80 到 0xFF 的位元組不變。我們可能會想知道 htmlspecialchars() 是否可能會意外地將 2 到 4 位元組 UTF-8 字元中的任何位元組更改為 &lt; 等。答案是不會。當 UTF-8 字元長度為 2 到 4 個位元組時,此字元中的所有位元組都在 0x80 到 0xFF 範圍內。沒有任何一個會在 0x00 到 0x7F 範圍內。當 UTF-8 字元長度為 1 個位元組時,它與 ASCII 相同,為 7 位元,從 0x00 到 0x7F。因此,當 UTF-8 字元長度為 1 個位元組時,htmlspecialchars($s) 將會執行其工作,當 UTF-8 字元長度為 2 到 4 個位元組時,htmlspecialchars($s) 將會直接傳遞那些位元組而不做變更。因此,無論 $s 是 ASCII、ISO-8859-1 (Latin-1) 或 UTF-8,htmlspecialchars($s) 都會執行相同的工作。
5
Daniel Klein
2 年前
因為文件上說

int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401

你會認為 ENT_HTML401 很重要。但是如註解所提及的,如果你沒有指定文件類型,則 ENT_HTML401 是預設值。這是因為 ENT_HTML401 === 0。所以

int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401

與以下程式碼完全相同

int $flags = ENT_QUOTES | ENT_SUBSTITUTE
10
Felix D.
10 年前
另一件重要的注意事項是
htmlspecialchars(NULL)
會傳回空字串而不是 NULL!
5
ASchmidt at Anamera dot net
3 年前
必須指定 ENT_HTML5,並將 double_encode=false,才能避免雙重編碼。

原因是與文件相反,double_encode=false 並不會無條件且全域地防止所有現有實體的雙重編碼。至關重要的是,它只會跳過為所選文件類型明確有效的那些字元實體的雙重編碼!

由於 ENT_HTML5 引用了最廣泛的字元實體清單,因此它是對現有字元實體最寬容的唯一設定。

<?php
declare(strict_types=1);
$text = 'ampersand(&amp;), double quote(&quot;), single quote(&apos;), less than(&lt;), greater than(&gt;), numeric entities(&#x26;&#x22;&#x27;&#x3C;&#x3E;), HTML 5 entities(&plus;&comma;&excl;&dollar;&lpar;&ncedil;&euro;)';
$result3 = htmlspecialchars( $text, ENT_NOQUOTES | ENT_SUBSTITUTE, 'UTF-8', /*double_encode*/false );
$result4 = htmlspecialchars( $text, ENT_NOQUOTES | ENT_XML1 | ENT_SUBSTITUTE, 'UTF-8', /*double_encode*/false );
$result5 = htmlspecialchars( $text, ENT_NOQUOTES | ENT_XHTML | ENT_SUBSTITUTE, 'UTF-8', /*double_encode*/false );
$result6 = htmlspecialchars( $text, ENT_NOQUOTES | ENT_HTML5 | ENT_SUBSTITUTE, 'UTF-8', /*double_encode*/false );

echo
"<br />\r\nHTML 4.01:<br />\r\n", $result3,
"<br />\r\nXML 1:<br />\r\n", $result4,
"<br />\r\nXHTML:<br />\r\n", $result5,
"<br />\r\nHTML 5:<br />\r\n", $result6, "<br />\r\n";
?>

會產生

HTML 4.01 (將不會識別單引號,但會識別歐元符號)
ampersand(&), 雙引號("), 單引號(&apos;), 小於符號(<), 大於符號(>), 數值實體(&"'<>), HTML 5 實體(&plus;&comma;&excl;&dollar;&lpar;&ncedil;€)

XML 1 (會識別單引號,但不會識別歐元符號)
ampersand(&), 雙引號("), 單引號('), 小於符號(<), 大於符號(>), 數值實體(&"'<>), HTML 5 實體(&plus;&comma;&excl;&dollar;&lpar;&ncedil;&euro;)

XHTML (會識別單引號和歐元符號)
ampersand(&), 雙引號("), 單引號('), 小於符號(<), 大於符號(>), 數值實體(&"'<>), HTML 5 實體(&plus;&comma;&excl;&dollar;&lpar;&ncedil;€)

HTML 5 (會識別「所有」有效的字元實體)
ampersand(&), 雙引號("), 單引號('), 小於符號(<), 大於符號(>), 數值實體(&"'<>), HTML 5 實體(+,!$(ņ€)
11
ivan at lutrov dot com
13 年前
請小心,「charset」引數是區分大小寫的。這違反直覺,而且沒有實際用途,因為 HTML 規範實際上恰好相反。
1
Killian Leroux
2 年前
感謝 Thomasvdbulk 的解決方法,我想補充一點

當 HTML 包含連結標籤,且在程式碼之前沒有換行符號時,程式碼將無法運作 :/

您的範例

<?php
$string
= "
this is smaller < than this<br />
this is greater > than this<br />
this is the same = as this<br />
<a href=\"http://www.example.com/example.php?test=test\">This is a link</a><br />
<b>Bold</b> <i>italic</i> etc..."
;
echo
fixtags($string);
?>

可以運作,但是這個無法運作

<?php
$string
= "
this is smaller < than this<br />
this is greater > than this<br />
this is the same = as this<br /><a href=\"http://www.example.com/example.php?test=test\">This is a link</a><br />
<b>Bold</b> <i>italic</i> etc..."
;
echo
fixtags($string);
?>

所以我會在開頭 (htmlspecialchars 之前) 加入一個小的解決方法

<?php
$text
= preg_replace('/<a/', "\r\n<a", $text);
?>

我不喜歡這樣,但我找不到其他解決方案... :/
4
qshing1437 at hotmail dot com
5 年前
如果您使用 htmlspecialchars() 來逸出任何 HTML 屬性,請務必使用雙引號而不是單引號作為屬性。

例如,

> 用單引號包住
<?php
echo "<p title='" . htmlspecialchars("Hello\"s\'world") . "'">

// title 最後會變成 Hello"s\,而單引號之後的其餘文字將被截斷。
?>

> 用雙引號包住
<?php
echo '<p title="' . htmlspecialchars("Hello\"s\'world") . '"'>

// title 將正確顯示為 Hello"s'world
?>
8
Anonymous
15 年前
關於如何使用 htmlspecialchars() 和 htmlentities() 來篩選表單上的使用者輸入,以便稍後顯示和/或儲存到資料庫的一些注意事項...

1. 使用 htmlspecialchars() 來篩選 html 輸入標籤的文字輸入值。例如,

echo '<input name=userdata type=text value="'.htmlspecialchars($data).'" />';


2. 使用 htmlentities() 來篩選大部分其他種類 html 標籤的相同資料值,例如,

echo '<p>'.htmlentities($data).'</p>';

3. 使用您的資料庫逸出字串函式來篩選資料庫更新和插入的資料,例如,使用 postgresql,

pg_query($connection,"UPDATE datatable SET datavalue='".pg_escape_string($data)."'");


這個策略似乎運作良好且一致,不會限制使用者可能想要輸入和顯示的任何內容,同時仍然提供良好的保護,防止各種 HTML 和資料庫逸出序列注入,這些注入可能會因為使用者透過 HTML 表單提交輸入資料時,意外或蓄意輸入此類字元序列而產生。
5
Anonymous
15 年前
這可能看起來很明顯,但它讓我感到有些挫折。如果您嘗試使用 htmlspecialchars,並且設定了 $charset 引數,而您在其上執行的字串實際上不是您指定的相同字元集,您將會收到一個空字串,而沒有任何通知/警告/錯誤。

<?php

$ok_utf8
= "A valid UTF-8 string";
$bad_utf8 = "An invalid UTF-8 string";

var_dump(htmlspecialchars($bad_utf8, ENT_NOQUOTES, 'UTF-8')); // string(0) ""

var_dump(htmlspecialchars($ok_utf8, ENT_NOQUOTES, 'UTF-8')); // string(20) "A valid UTF-8 string"

?>

因此,請確保您的字元集一致

<?php

$bad_utf8
= "An invalid UTF-8 string";

// 確保它真的是 UTF-8
$bad_utf8 = mb_convert_encoding($bad_utf8, 'UTF-8', mb_detect_encoding($bad_utf8));

var_dump(htmlspecialchars($bad_utf8, ENT_NOQUOTES, 'UTF-8')); // string(23) "An invalid UTF-8 string"

?>

我遇到這個問題,是因為 Mac 使用者從程式複製/貼上貼文,其中包含一些奇怪的字元。
4
php dot net at orakio dot net
16 年前
我最近在研究一些程式碼時,看到這個被用來讓資料對「SQL」安全。

此函式不應該用來讓資料對 SQL 安全 (儘管它對於防止網路釣魚非常有效)。

以下是如何「不」使用此函式的範例

<?php
$username
= htmlspecialchars(trim("$_POST[username]"));

$uniqueuser = $realm_db->query("SELECT `login` FROM `accounts` WHERE `login` = '$username'");
?>

(唯一對 $_POST['username'] 的其他檢查是確保它不是空的,在修剪掉只包含空白的名稱後,它確實是空的)

這裡的問題是它保留了預設值,允許在 SQL 查詢中使用的單引號。開啟魔術引號(magic quotes)或許可以修復它,但你不應該依賴魔術引號,事實上你應該永遠不要使用它,而應該修正程式碼。此外,反斜線 \ 沒有被跳脫也有問題。即使使用了魔術引號,仍然會存在允許使用者名稱長度超過限制,以及產生一些非常奇怪的使用者名稱的問題,因為這些名稱將在 HTML 之外使用。這只是為使用 MySQL 的另一個系統提供註冊的前端。當然,在輸出上使用它不會造成這個問題。

另一種方法可以進行某種程度的修復是使用 ENT_QUOTE 或執行以下操作:

<?php
$uniqueuser
= $realm_db->query('SELECT `login` FROM `accounts` WHERE `login` = "'.$username.'";');
?>

無論如何,這些解決方案都不是好的實務,而且並非完全沒有缺陷。這個函式根本不應該以這種方式使用。

我希望這能防止新手不正確地使用這個函式(他們顯然會這樣做)。
3
ryan at ryano dot net
23 年前
實際上,如果你使用的是 >= 4.0.5,理論上這應該更快(至少開銷更少)

$text = str_replace(array("&gt;", "&lt;", "&quot;", "&amp;"), array(">", "<", "\"", "&"), $text);
2
PoV
9 年前
請注意您來源檔案的編碼!!!

這裡的一些建議參考了硬編碼編碼的變通方法。

<?php
echo htmlspecialchars('<b>Wörmann</b>'); // 為什麼這個沒用?
?>

事實證明,問題可能出在您的文字編輯器。

從 PHP 5.4 開始,htmlspecialchars 現在預設使用 UTF-8 編碼。也就是說,許多文字編輯器預設使用非 UTF 編碼,例如 ISO-8859-1(即 Latin-1)或 WIN-1252。如果您將檔案的編碼更改為 UTF-8,則上面的程式碼現在可以正常運作(即 ö 在 UTF-8 和 ISO-8859-1 中的編碼方式不同,您需要 UTF-8 版本)。

請確保您在 UTF-8 Unicode 模式下編輯!請查看您的 UI 或手冊,了解如何將檔案轉換為 Unicode。最好也找出在 UI 中查看目前檔案編碼的位置。
1
minder at ufive dot unibe dot ch
11 年前
問題

在許多 PHP 舊版產品中,函式 htmlspecialchars($string) 用於將 < 和 > 以及引號等字元轉換為 HTML 實體。這避免了 HTML 標籤的解析和不對稱的引號情況。

自 PHP 5.4 起,如果未在函式中明確定義 charset 作為第三個參數,則 htmlspecialchars($string) 中的 $string 預期為 utf8 字元。舊版產品大多使用 Latin1(別名 iso-8859-1),這使得函式 htmlspecialchars()、htmlentites() 和 html_entity_decode() 在 $string 中存在特殊字元(例如,德語變音符)時傳回空字串。

PHP < 5.4

echo htmlspecialchars('<b>Woermann</b>') // 輸出:&lt;b&gt;Woermann&lt;b&gt;
echo htmlspecialchars('Wörmann') // 輸出:&lt;b&gt;Wörmann&lt;b&gt;

PHP = 5.4

echo htmlspecialchars('<b>Woermann</b>') // 輸出:&lt;b&gt;Woermann&lt;b&gt;
echo htmlspecialchars('<b>Wörmann</b>') // 輸出:空

三種替代解決方案

a) 不在 PHP 5.4 上執行舊版產品
b) 將程式碼中所有找到的
htmlspecialchars($string) 和 *** 變更為
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'ISO-8859-1')
c) 將所有 htmlspecialchars() 和 *** 替換為新的自製函式

*** htmlentities() 和 html_entity_decode() 的情況也是如此;

解決方案 c

1 在相關的舊版專案中進行搜尋和取代
搜尋:htmlspecialchars
取代為:htmlXspecialchars
搜尋:htmlentities
取代為:htmlXentities
搜尋:html_entity_decode
取代為:htmlX_entity_decode
2a 將以下三個函式複製並貼到舊版專案中現有且已包含在各處的 PHP 檔案中。(當然,每個請求只能包含一次該 PHP 檔案,否則您將收到 Redeclare Function Fatal Error)。

function htmlXspecialchars($string, $ent=ENT_COMPAT, $charset='ISO-8859-1') {
return htmlspecialchars($string, $ent, $charset);
}

function htmlXentities($string, $ent=ENT_COMPAT, $charset='ISO-8859-1') {
return htmlentities($string, $ent, $charset);
}

function htmlX_entity_decode($string, $ent=ENT_COMPAT, $charset='ISO-8859-1') {
return html_entity_decode($string, $ent, $charset);
}

或 2b 建立一個新的 PHP 檔案,其中包含上面提到的三個函式,例如,htmlXfunctions.inc.php,並像這樣在舊版產品中每個 PHP 檔案的第一行包含它:require_once('htmlXfunctions.inc.php')。
0
nachitox2000 [at] hotmail [dot] com
14 年前
我在處理西班牙特殊字元時遇到問題。因此,我認為應該使用 htmlspecialchars,但我的字串也包含 HTML。
所以我使用了這個 :) 希望對你有幫助

<?php
function htmlspanishchars($str)
{
return
str_replace(array("&lt;", "&gt;"), array("<", ">"), htmlspecialchars($str, ENT_NOQUOTES, "UTF-8"));
}
?>
-4
solar-energy
17 年前
另請參閱函式「urlencode()」,它對於透過 URL 傳遞包含 & 符號和其他特殊字元的文字很有用

(即,文字的編碼方式與使用 GET 方法從表單傳送時相同)

例如:

<?php
echo "<a href='foo.php?text=".urlencode("foo?&bar!")."'>link</a>";
?>

產生

<a href='foo.php?text=foo%3F%26bar%21'>link</a>

如果點擊該連結,foo.php 中的 $_GET["text"] 將包含 "foo?&bar!"
-3
_____ at luukku dot com
22 年前
各位,請不要在最簡單的字串替換操作(將常數字串替換為另一個字串)中使用 ereg_replace。
請使用 str_replace。
To Top