2012-06-19 62 views
0

我想製作一個應用程序,它可以讓我更容易地創建HTML文檔。PHP如何防止PHP轉義html fopen fwrite

它主要工作,除了當我寫入文件它增加反斜槓。

<a href=\"google.com\">google</a> 

任何想法如何阻止它做到這一點?

我得到它的工作!如果我在將它寫入文件之前將stripslashes()與\ 保存/創建文件感謝您的全力幫助!

+0

你可以用你的fwrite調用發佈代碼嗎? – NaturalBornCamper

+1

fwrite($ fp,stripslashes($ whatever)); – Dale

+0

它添加了反斜槓和不具有「stripslashes」功能?您是否嘗試回顯$ whatever字符串以查看其中是否有毛刺? – NaturalBornCamper

回答

1

如果您使用單引號字符串,則不應使用帶反斜槓的轉義雙引號,因爲它們按字面解釋。

docs

注:當它們出現在單引號字符串特殊字符不像雙引號和定界符語法,變量和轉義序列不會被擴大。

2

這可能是因爲魔術引號上,如果你不希望使用的stripslashes每一次,你應該禁用他們要麼在php.ini文件中或者用類似這樣的htaccess文件:

的php.ini文件

magic_quotes_gpc = Off 
magic_quotes_runtime = Off 
magic_quotes_sybase = Off 

的.htaccess文件

php_flag magic_quotes_gpc Off 

,或者直接在代碼中禁用它們:

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); 
} 

來源:http://php.net/manual/en/security.magicquotes.disabling.php

+0

無法訪問php.ini文件(共享服務器)和沒有去htaccess文件 – user1330492

+0

沒有辦法添加.htaccess文件?你甚至不能創建你的php腳本所在的htaccess文件?我不明白爲什麼這是不可能的,但如果是這樣的話,那麼我每次猜測都必須添加stripslashes。 – NaturalBornCamper

+0

/我看起來既確保沒有人在尋找|我真的不明白htaccess文件我添加了命令php_flag magic_quotes_gpc關閉到它的結尾,但它沒有做任何事,所以我刪除它(不想弄亂我不明白的東西)我用它來設置一個404,這是關於它 – user1330492

1

這種行爲是由PHP的棄用Magic Quotes指令造成的,你仍然是激活的,因爲它是在默認情況下任何違約5.4之前的PHP安裝。除非你指定一個長度參數,否則fwrite將會看到magic-quotes-runtime以查看它是否會逃脫。

關閉它,你可以把

php_flag magic_quotes_gpc Off 

.htaccess文件,你需要使用Apache DSO允許這個選項

,或者你可以disable it in php.ini

,如果你由於您在共享主機上或出於其他原因而無法執行這些任何一種操作,然後在代碼中解決這些問題。

function write($resource,$string,$length) 
    if (get_magic_quotes_gpc()) { 
     $string = stripslashes($string); 

    } 
    return fwrite($resource, $string,$length); 
} 
0

我有一個類似的問題,但有一個$ _POST ['body']變量。這適用於我:

str_replace("\\", "", $_POST['body']); 
+0

如果回答這個問題,請解釋原因。似乎你的回答解決了與問題中不同的(但可能相關的)問題。 – ptd