2011-10-03 89 views
-1

我有一個小的PHP代碼,打印歡迎信息PHP停止報價逃生

<?php 
echo "Hello ". $_GET['name']; 
?> 

,我已經把我的網站上的代碼託管Godaddy的服務器上,我發現服務器逃逸單引號和雙引號。例如

http://www.example.com/test.php?name=test's 

打印

Hello test\'s 

但相同的代碼運行在我的電腦上的Apache服務器上的罰款。這怎麼解決?

+6

最壞的虛擬主機如初,現在移動,如果你知道什麼是對你有好處。 – 2011-10-03 20:19:37

+0

我希望我可以不止一次地點評評論。 –

回答

7

把下面的代碼在.htaccess文件通知magic quotes不應該添加到 ET,P OST和ç ookie變量PHP。

php_flag magic_quotes_gpc Off 

如果你的虛擬主機提供商不允許你改變你的設置,你需要自己使用stripslashes功能刪除這些引號。由於$_GET/$_POST/$_COOKIE數組可能包含其他數組(通過使用字段名稱,如name[full]=John Smit),因此需要使用遞歸函數來去除斜線。例如,使用的片段從this comment從輸入中刪除所有「魔術引號」:

<?php 
if (get_magic_quotes_gpc()) { 
    $strip_slashes_deep = function ($value) use (&$strip_slashes_deep) { 
     return is_array($value) ? array_map($strip_slashes_deep, $value) : stripslashes($value); 
    }; 
    $_GET = array_map($strip_slashes_deep, $_GET); 
    $_POST = array_map($strip_slashes_deep, $_POST); 
    $_COOKIE = array_map($strip_slashes_deep, $_COOKIE); 
} 
?> 

請注意,您的代碼段很容易受到XSS,所以使用proper escaping

<?php 
echo "Hello " . htmlspecialchars($_GET['name']); 
?> 

另一種推薦方式檢索這樣的輸入值是filter_*函數。例如這是上面的代碼中的相當,但工作原理magic_quotes_gpc設置不分:

<?php 
echo filter_input(INPUT_GET, 'name', FILTER_SANITIZE_FULL_SPECIAL_CHARS); 
?> 

相關文檔:

4

GoDaddy的顯然有魔術引號啓用:

if(get_magic_quotes_gpc()) 
    echo stripslashes($_GET['name']); 
else 
    echo $_GET['name']; 
0

在提交它之前Urlencode你的查詢字符串,然後在將它寫回瀏覽器之前使用urldecode。這將緩解任何瀏覽器或託管問題,並且是一個很好的做法。你在做什麼通常被認爲是一個'壞主意',因爲在沒有編碼的URL中直接支持撇號和引號。

0

由於您使用GoDaddy的,我建議你打電話stripslashes

<?php 
echo "Hello ". stripslashes($_GET['name']); 
?>