PHP Conference Japan 2024

htmlspecialchars

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

htmlspecialchars将特殊字符转换为 HTML 实体

描述

htmlspecialchars(
    字符串 $string,
    整数 $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
    ?字符串 $encoding = null,
    布尔值 $double_encode = true
): 字符串

某些字符在 HTML 中具有特殊意义,如果要保留其含义,则应将其表示为 HTML 实体。此函数返回一个进行了这些转换的字符串。如果您需要将所有具有关联命名实体的输入子字符串进行转换,请改用 htmlentities()

如果传递给此函数的输入字符串和最终文档共享相同的字符集,则此函数足以准备输入以包含在 HTML 文档的大多数上下文中。但是,如果输入可以表示最终文档字符集中未编码的字符,并且您希望保留这些字符(作为数字或命名实体),则此函数和 htmlentities()(仅编码具有命名实体等效项的子字符串)可能都不够。您可能需要改用 mb_encode_numericentity()

执行的转换
字符 替换
& (与号) &
" (双引号) ",除非设置了 ENT_NOQUOTES
' (单引号) ' (对于 ENT_HTML401) 或 ' (对于 ENT_XML1ENT_XHTMLENT_HTML5),但仅当设置了 ENT_QUOTES
< (小于) &lt;
> (大于) &gt;

参数

字符串

要转换的 字符串

标志

一个或多个以下标志的位掩码,这些标志指定如何处理引号、无效代码单元序列和使用的文档类型。默认为 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 默认为 default_charset 配置选项的值。

尽管此参数在技术上是可选的,但如果您提供的输入的 default_charset 配置选项可能设置不正确,则强烈建议您为代码指定正确的值。

对于此函数,编码 ISO-8859-1ISO-8859-15UTF-8cp866cp1251cp1252KOI8-R 实际上是等效的,前提是 string 本身对编码有效,因为受 htmlspecialchars() 影响的字符在所有这些编码中都占据相同的位置。

支持以下字符集

支持的字符集
字符集 别名 描述
ISO-8859-1 ISO8859-1 西欧语,拉丁语-1。
ISO-8859-5 ISO8859-5 很少使用的西里尔字符集(拉丁语/西里尔语)。
ISO-8859-15 ISO8859-15 西欧语,拉丁语-9。添加了欧元符号、拉丁语-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 关闭时,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 条注释

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/
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() 执行相同的操作
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...

希望它对您有所帮助!
Kenneth Kin Lum
16 年前
如果您的目标只是保护您的页面免受跨站点脚本 (XSS) 攻击,或者只是在网页上显示 HTML 标记(例如,在页面上显示 <body>),那么使用 htmlspecialchars() 就足够了,并且比使用 htmlentities() 更好。一个小点是 htmlspecialchars() 比 htmlentities() 快。更重要的是,当我们在代码中使用 htmlspecialchars($s) 时,它会自动与 UTF-8 字符串兼容。否则,如果我们在 UTF-8 编码的字符串 $s 中碰巧存在外来字符,那么 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) 都将执行相同的工作。
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
Felix D.
10 年前
另一件需要提及的重要事项是
htmlspecialchars(NULL)
返回空字符串而不是 NULL!
ASchmidt at Anamera dot net
3 年前
必须除了 double_encode=false 之外还指定 ENT_HTML5 以避免双重编码。

原因是,与文档相反,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(&), double quote("), single quote(&apos;), less than(<), greater than(>), numeric entities(&"'<>), HTML 5 entities(&plus;&comma;&excl;&dollar;&lpar;&ncedil;€)

XML 1(会识别单引号,但不会识别欧元符号)
ampersand(&), double quote("), single quote('), less than(<), greater than(>), numeric entities(&"'<>), HTML 5 entities(&plus;&comma;&excl;&dollar;&lpar;&ncedil;&euro;)

XHTML(识别单引号和欧元符号)
ampersand(&), double quote("), single quote('), less than(<), greater than(>), numeric entities(&"'<>), HTML 5 entities(&plus;&comma;&excl;&dollar;&lpar;&ncedil;€)

HTML 5(识别“所有”有效的字符实体)
ampersand(&), double quote("), single quote('), less than(<), greater than(>), numeric entities(&"'<>), HTML 5 entities(+,!$(ņ€)
ivan at lutrov dot com
13 年前
小心,“charset”参数是区分大小写的。这与直觉不符,也没有实际用途,因为 HTML 规范实际上是相反的。
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);
?>

我不喜欢这样,但我找不到其他解决方案... :/
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
?>
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 表单提交其输入数据时故意或意外地输入此类字符序列而引入。
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 用户提交了从程序复制粘贴的帖子,其中包含奇怪的字符。
php dot net at orakio dot net
16 年前
最近在浏览一些代码时,我发现有人用 `htmlspecialchars` 函数来确保数据对 "SQL" 安全。

这个函数不应该用于使数据对 SQL 安全(尽管它可以很好地防止网络钓鱼)。

以下是一个**错误**使用该函数的示例:

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

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

(`$_POST['username']` 唯一其他的检查是确保它不为空,但在仅包含空格的用户名经过 `trim` 处理后,它将为空。)

这里的问题在于,它使用了默认设置,允许使用单引号,而单引号在 SQL 查询中会被使用。开启 `magic_quotes` 可能会解决这个问题,但你不应该依赖 `magic_quotes`,事实上,你永远不应该使用它,而应该修复代码。此外,`\` 字符也没有被转义。即使使用了 `magic_quotes`,仍然存在允许用户名长度超过限制以及允许一些非常奇怪的用户名的问题,因为这些用户名需要在 HTML 外部使用,这仅仅是为使用 MySQL 的另一个系统提供一个前端注册功能。当然,在输出中使用它不会导致这个问题。

另一种解决方法是使用 `ENT_QUOTE` 或者:

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

无论哪种方式,这些解决方案都不是最佳实践,而且都不完美。这种方式根本不应该使用此函数。

我希望这能防止新手错误地使用此函数(因为他们显然会这样做)。
ryan at ryano dot net
23 年前
实际上,如果你使用的是 >= 4.0.5 版本,理论上这应该更快(至少开销更小)。

$text = str_replace(array("&gt;", "&lt;", "&quot;", "&amp;"), array(">", "<", "\"", "&"), $text);
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 中查看当前文件编码也是一个好主意。
minder at ufive dot unibe dot ch
11 年前
问题

在许多 PHP 遗留产品中,`htmlspecialchars($string)` 函数用于将 < 和 > 等字符以及引号转换为 HTML 实体。这可以避免 HTML 标签和不对称引号情况的解释。

从 PHP 5.4 开始,如果在函数中没有显式定义第三个参数作为字符集,则 `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 文件每个请求只能包含一次,否则你会得到一个“重新声明函数”的致命错误)。

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')`。
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"));
}
?>
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!"。
_____ at luukku dot com
22 年前
各位,对于最简单的字符串替换操作(用另一个常量字符串替换常量字符串),请不要使用 `ereg_replace`。
使用 `str_replace`。
To Top