2010-11-28 38 views
1
<?php echo ($i % 6 == 5) ? 'style=\"margin-right:0px\"' : ''; ?> 

我剛剛在視圖端口上打印了style =「」。PHP基本串聯問題?

更新: 爲什麼當我們在一個字符串中時不需要雙引號? 因爲雙引號永遠不會被視爲其他任何字符串,如果它們在單引號內?

由於提前, MEM

+0

我們可以看到更多的代碼嗎?反斜槓並不重要。即使使用斜槓,你也應該看到style = \「margin-right:0px \」not style =「」。 – typeoneerror 2010-11-28 04:27:08

+0

像你一樣有機會有風格=「<?php回聲($ i%6 == 5)?'style = \」margin-right:0px \「':'';?>」 – typeoneerror 2010-11-28 04:27:46

+0

你在哪裏看結果?原始輸出?瀏覽器?瀏覽器的DOM檢查器? – deceze 2010-11-28 04:31:01

回答

3

爲什麼當我們在一個字符串中時不需要雙引號?因爲雙引號永遠不會被視爲其他任何字符串,如果它們在單引號內?

manual,對於單引號的字符串:

要指定一個單引號,用反斜槓轉義(\)。要指定文字反斜槓,請將其加倍(\\)。 所有其他反斜槓實例將被視爲文字反斜槓:這意味着您可能習慣的其他轉義序列(如\ r或\ n)將按照指定的字面輸出,而不是具有任何特殊含義。

2

你用單引號'爲字符串,所以轉義雙引號"字符串裏面是不必要的。用'style="margin-right:0px"'代替它,它應該工作得很好。

要解釋PHP如何處理字符串和引號好一點,瞭解'"之間的區別很有幫助。用'封裝的字符串總是按原樣顯示。字符串內部沒有任何內容會被解析,包括任何轉義字符(例如\n換行符或轉義引號,除了轉義單引號\')。相反,在"中封裝的字符串會被解析,所以如果您有任何轉義字符,它們將被正確顯示,並且如果字符串中有任何變量,它們也將被輸入。例如,

// Set name variable to my name 
$name = "nhinkle"; 

// Echo hello name with single quotes 
echo 'hello {$name}'; 
// The result will be "hello {$name}" 

// Echo hello name with double quotes 
echo "hello {$name}"; 
// The result will be "hello nhinkle" 

它需要使用單引號較少的處理能力,因爲PHP不需要掃描串逃避什麼,它只是需要找到字符串的結尾。但是,如果您確實需要解析字符串內的內容,請確保使用雙引號。

2

在單引號內沒有必要使用雙引號。

<?php echo ($i % 6 == 5) ? 'style="margin-right:0px"' : ''; ?> 

您只需要在單引號或雙引號內的雙引號內轉義單引號。如果你想在一個單引號字符串中寫單引號,那麼這個單引號會終止字符串。

$foo = 'a'b'; 

PHP認爲這是字符串a,接着是無意義b和字符串';其從不終止的開始;這是無效的語法。

$foo = 'a\'b'; 

這被正確解析爲字符串a'b。你有轉義的含義此時通常會有報價。

使用雙引號內的雙引號,不存在這樣的歧義。單引號字符串中的雙引號不會終止字符串,它沒有那種需要轉義的特殊含義。如果你包含一個反斜槓,反斜槓將被直接使用。

$foo = 'a"b'; // a"b 
$foo = 'a\"b'; // a\"b 

我想問題是你如何看待輸出。如果輸出爲style=\"…\",則在查看輸出的環境中,轉義的雙引號可能導致語法無效。