當我寫PHP 5.3.1在默認情況下是否添加一個斜槓(「」)?
輸入數據:hel'l"lo
print_r($_POST)
顯示hel\'\"lo
和當我使用
if(get_magic_quotes_gpc()){
mysql_real_escape_string($_POST);
顯示
hel\\\'\\\"lo
由於PHP自動添加斜槓,是否需要使用mysql_real_escape_string
?
當我寫PHP 5.3.1在默認情況下是否添加一個斜槓(「」)?
輸入數據:hel'l"lo
print_r($_POST)
顯示hel\'\"lo
和當我使用
if(get_magic_quotes_gpc()){
mysql_real_escape_string($_POST);
顯示
hel\\\'\\\"lo
由於PHP自動添加斜槓,是否需要使用mysql_real_escape_string
?
是否需要使用mysql_real_escape_string?
是的。但是不是作爲覆蓋編碼$_POST
或$_GET
。這是在輸入階段應用輸出階段轉義機制,這是錯誤的,會以意想不到的方式破壞您的字符串。
您應該保持原始形式的字符串,直到將字符串插入到另一個上下文中。 只有點,您使用適當的轉義函數。與MySQL:
或HTML:
<p>Title: <?php echo(htmlspecialchars($_POST['title'])) ?></p>
我最近使用PHP 5.3.6啓用選項 「magic_quotes_gpc的」 一個託管。 不幸的是,它是一個共享主機,所以我無法更改配置(另外「php_flag magic_quotes_gpc關」到.htaccess失敗)。
這對我來說是一開始把這個工作守則級解決方案
if (get_magic_quotes_gpc() === 1)
{
$_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
$_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
$_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
$_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}
看到這裏太
神奇的解決方案在互聯網上找到誠實
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
親愛的主席先生,當我沒有得到真正有價值的答案時,我該如何接受? – diEcho 2010-01-23 12:11:41