[英]Baffled by PHP escaping of double-quotes in HTML forms
我有一个简单的PHP脚本,用于前端SQLite数据库。 这没什么花哨或复杂的。 但是我从数据库中的记录中注意到,我在带有双引号的表单字段中输入的任何内容都会在表单处理中遇到,就好像我用反斜杠转义引号一样。 所以当我输入标题的记录时:
英国轻型多用途车10HP“Tilly”
数据库中显示的是:
英国轻型多功能车10HP“蒂莉”
我不知道这些来自哪里,更糟糕的是,即使使用以下preg_replace似乎也不会删除它们:
$name = preg_replace('/\\\\"/', '"', $_REQUEST['kits_name']);
如果我转出$name
,它仍然带有不需要的\\
字符。
你很magic_quotes_gpc
在php.ini
中将magic_quotes_gpc
设置为on
。 如果您想避免这种情况并使用自己的正则表达式,请进行如下检查:
if (get_magic_quotes_gpc())
{
$mytext = stripslashes($your_text);
}
// and your further code....
这意味着您的服务器已启用magic_quotes_gpc。
您可以使用ini_set()来禁用此设置,或者您可以创建一个方法来过滤$ _REQUEST值()
function getRequest($key)
{
$val = $_REQUEST[$key];
if(get_magic_quotes_gpc() == 1) {
$val = stripslashes($val);
}
return $val;
}
echo getRequest('kits_name');
是否可以在服务器上启用魔术引号 ?
好吧,因为缺乏好的答案。
如上所述,这是因为魔术引用了。
在插入数据之前,您必须删除这些斜杠。 因此,要摆脱它,您可以使用.htaccess
(如果有)与这些设置
php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0
或使用这样的代码手动创建
if ( get_magic_quotes_gpc( ) ) {
$_GET = array_map_recursive('stripslashes', $_GET) ;
$_POST = array_map_recursive('stripslashes', $_POST) ;
$_COOKIE = array_map_recursive('stripslashes', $_COOKIE) ;
$_REQUEST = array_map_recursive('stripslashes', $_REQUEST) ;
if (isset($_SERVER['PHP_AUTH_USER'])) stripslashes($_SERVER['PHP_AUTH_USER']);
if (isset($_SERVER['PHP_AUTH_PW'])) stripslashes($_SERVER['PHP_AUTH_PW']);
}
如果你的php版本不支持array_map_recursive函数,你可以使用像这样的递归函数
function strips(&$el) {
if (is_array($el))
foreach($el as $k=>$v)
strips($el[$k]);
else $el = stripslashes($el);
}
或编写自己的代码您可以使用此代码清理现有数据
至于
如果我转出$ name,它仍然带有不需要的\\字符。
它可能是错误使用htmlspecialchars
函数的结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.