2013-08-22 551 views
1

我有一個簡單的PHP腳本,應該使用反斜槓來避免單引號和雙引號。這裏是我的代碼:str_replace雙引號和單引號

$output = str_replace('"','\"',$input); 
$output = str_replace("'","\'",$output); 
return $output; 

問題是,它只是逃脫雙引號,所以像

"This" is a 'string' 

字符串中解析出是

\"This\" is a 'string' 

\"This\" is a \'string\' 

如果我將第二行更改爲

$output = str_replace("'","asdf",$output); 

我得到

\"This\" is a asdfstringasdf 

任何想法是什麼問題呢?

感謝

+0

@symlynk我對你的代碼沒有問題,你是如何聲明你的'$ input'的? – Jason

+0

這是一個存儲在CMS中的字符串變量。 – symlink

+1

我知道它已經解決了,但你可以使用[addslashes](http://www.php.net/addslashes) –

回答

0

問題解決了。我在瀏覽器的控制檯中查看輸出,由於某種原因,顯示的是雙引號的反斜槓,但不是單曲。查看源顯示它正常工作。

+1

太棒了!請記住,'和'是逃生角色,將來應該這樣對待,這會給你帶來最小的麻煩。 – sockfd

1

試試這個:

$output = str_replace("\"","\\\"",$input); 
$output = str_replace("\'","\\\'",$output); 
return $output; 

的問題是,「在字符串中,應當注意的是\」,因爲它是一個轉義字符。反斜槓\也是一個雙重字符串。

讓我知道這是否工作。

+0

這仍然會產生相同的結果。雙引號被轉義,單引號被忽略。 – symlink

+0

你能告訴我你的輸入字符串嗎?你還有其他的str_replaces嗎? – sockfd

2

我沒有與你的代碼中的問題,我的測試是在下面:

<?php 

    $input = '"This" is a '."'".'String'."'"; 
    echo $input.'<br />'; 
    //Echos "This" is a 'String' 

    $output = str_replace('"','\"',$input); 
    $output = str_replace("'","\'",$output); 
    echo $output; 
    //Echos \"This\" is a \'String\' 

編輯

現在無關,OP想通了:d