我使用如下代码在我的php应用程序的不同部分之间传递消息:
$msg='"'.$_REQUEST['site'].'" modified.';
header('Location: sites.php?msg='.$msg);
exit();
在另一端拾取它的代码如下所示:
<?php if (isset($_GET['msg'])) {echo '<p><em>'.$_GET['msg'].'</em></p>';}?>
在我的开发环境中,输出如下所示:"Some site"
已修改。
在我的生产环境中,输出如下所示:\"Some site\"
已修改。
这让我相信环境之间php.ini
的设置存在差异。我一直在搜索,直到我的眼球起水泡,但我找不到差异。在网址中传递的内容如下所示:
sites.php?msg="Some site" modified
如果我把这段代码:
$msg=htmlspecialchars($msg);
在上面的变量赋值和标题调用之间,url看起来像这样:
sites.php?msg="Some site" modified.
但在这两种环境中都不会显示任何消息。如果$_REQUEST['site']
包含&符号,我也会遇到类似的问题。
任何人都可以解释这里发生了什么,以及如何解决它?
答案 0 :(得分:1)
配置称为magic_quotes_gpc
答案 1 :(得分:1)
您已启用Magic Quotes
在PHP.INI中禁用它们。
答案 2 :(得分:-1)
使用stripslashes:http://php.net/manual/en/function.stripslashes.php
<?php if (isset($_GET['msg'])) {echo '<p><em>'.stripslashes($_GET['msg']).'</em></p>';}?>