HTML表单,php和撇号

时间:2012-02-17 01:27:22

标签: php html forms apostrophe

使用HTML,XML和php 5.3(无SQL)进行单一分配。建立一个评论网站。我有一个textarea,用户可以在其中发表评论。如果用户输入撇号,例如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服务器上不会发生此问题;仅限我托管的网站。

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

3 个答案:

答案 0 :(得分: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'];
}

magic quotes reference详细介绍了历史,用法以及如何处理魔法引号。

另外,当您输出数据时,请务必将其转义(例如htmlspecialchars()),当您处理来自任何不受信任来源的输入时,请务必对其进行过滤(例如addslashes()mysql_real_escape_string())。

答案 1 :(得分:2)

尝试关闭魔术引号(PITA IMO!)。 (如上所述,当我输入我的响应时,drew的方法对于可移植性来说是最灵活的。 顺便说一句,如果你不打算以不同的方式处理变量,则无需声明新变量。所以用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(速度标签后的第一项)。

答案 2 :(得分:0)

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

有关详细信息,请参阅PHP reference获取“魔术引号”。