3

使用 HTML、XML 和 php 5.3(无 SQL)进行 uni 分配。建立一个评论网站。我有一个文本区域,用户可以在其中放置他们的评论。如果用户输入撇号,例如 World's Best Uni!,当我回显 $_REQUEST['reviewtext'] 时,我会得到 World's Best Uni!

为了按摩数据以保存在 XML 中,我有以下代码:

$cleantext1 = htmlspecialchars($_REQUEST['reviewtext']);
substr_replace($cleantext1,"\'","'");
$cleantext2 = strip_tags($cleantext1);
$cleantext3 = utf8_encode($cleantext2);

我在每一步都有回声,引用仍然是世界上最好的大学!在每一步。我希望前两行中的一行用 html 代码替换转义的撇号,但它似乎不起作用。

有趣的是,这个问题不会发生在我的本地 XAMPP 服务器上。仅在我托管的网站上。

有什么建议么?谢谢,肖恩

4

3 回答 3

8

您正在体验的是 PHP 的Magic Quotes功能,它自动转义来自 GET、POST、COOKIE 的输入。依赖这个特性是不明智的,并且自 PHP 5.3 起已弃用,并且在大多数配置中倾向于默认关闭(但不在 Uni 的配置中)。

您可以使用get_magic_quotes_gpc()来确定它是否已打开,如果是,则取消转义数据。

if (get_magic_quotes_gpc()) {
    $val = stripslashes($_POST['val']);
} else {
    $val = $_POST['val'];
}

魔术引号参考更详细地介绍了历史、用法以及如何处理魔术引号。

另外,顺便说一句,当你输出数据时,一定要确保你转义它(例如htmlspecialchars()并且当你处理来自任何不受信任的来源的输入时,请确保过滤它(例如addlashes()mysql_real_escape_string())。

于 2012-02-17T01:35:52.167 回答
2

尝试关闭魔术引号(PITA IMO!)。(正如我在输入回复时在上面发布的那样,draw 的方法对于可移植性来说是最灵活的。顺便说一下,如果您不打算以不同的方式处理变量,则无需声明新变量。所以在使用 htmlspecialchars 清理文本之后, 我会把它扔进 $cleanreview。而且你没有指定一个可以回来咬你的字符编码。我使用 UTF-8,因为它似乎是已经被广泛支持的最具前瞻性的编码。

http://www.php.net/manual/en/function.htmlspecialchars.php

BTEW,我也是正确标点符号的坚持者,所以在我的代码中,我替换了输出中的 html 实体:

$syn = str_replace("'", "’", $syn);
$syn = str_replace("“", "“", $syn);
$syn = str_replace("”", "”", $syn);
$syn = str_replace(" -- ", "—", $syn);

但当然,这是假设在您的 html 中声明了 UTF-8(速度标签后的第一项)。

于 2012-02-17T01:45:23.077 回答
0

这种自动转义某些字符的效果称为“魔术引号”,可以在 php.ini 配置文件中打开/关闭。显然,在本地服务器的配置中它是关闭的,而在服务器上它是打开的。

有关更多信息,请参阅PHP 参考中的“魔术引号”。

于 2012-02-17T01:35:30.870 回答