2014-06-11 19 views
0

最近我一直在遇到一些非常混亂的問題。非常容易混淆(和真氣)PHP/HTML問題

例如我會有一個代碼。像這樣:

echo "<ID>" . $daten->Firma_ID . "</ID><Name>" 
    . str_replace(array("&", "<", ">", "\"", "'"), 
    array("&amp;", "&lt;", "&gt;", "&quot;", "&apos;"), 
    $daten->Name_1. ' '. $daten->Name_2.", ". $daten->Ort) 
    ."</Name>"; 

這是爲了將字符串中的符號轉義爲HTML代碼。 (& - > & amp;)

現在這個輸出我雖然是字面上「&安培;」。有時。

進一步在代碼中我使用相同的方法(完全相同的代碼),只是它在那裏工作得很好。這真令人沮喪。

難道這有什麼理由嗎?此外,這發生在所有的瀏覽器(IE測試,Chrome和Firefox)

編輯:值得注意的是,如果我改變&放成類似&大街(ß)工作正常,以及。這似乎只發生在該特定時間的&安培。

+0

是'& amp;'瀏覽器顯示了什麼或者生成的源代碼是什麼?我可以想象它會被替換兩次:'&'=>'&'=>'& amp;',瀏覽器會再次顯示爲'&'。 –

+0

你應該學習一些正確的代碼格式。也許閱讀:http://framework.zend.com/manual/1.12/en/coding-standard.coding-style.html它在'zend'網站上,但它通常適用於'PHP'。 – ElmoVanKielmo

+0

@傑拉德我認爲這可能是事實。 – Eskir

回答

4

你重新發明輪子 - 只需使用:

$str_with_entities = htmlentities($str); 

documentation說。

您也可以嵌套這個電話,如果你想顯示的瀏覽器$amp;

$str_with_entities = htmlentities(htmlentities($str)); 
+0

仍然返回「& ;」(減去空格)。我現在想在桌上打我的頭。 – Eskir

+0

那麼,你想讓瀏覽器顯示'&'或'&'? – ElmoVanKielmo

+0

我需要瀏覽器向我展示'&'。源代碼說'&',但瀏覽器也是如此。 – Eskir

3

逃脫HTML輸出正確的方法是通過使用htmlspecialchars()

$id = $daten->Firma_ID; 
$name = "{$daten->Name_1} {$daten->Name_2} {$daten->Ort}"; 

printf('<ID>%s</ID><Name>%s</Name>', 
    htmlspecialchars($id, ENT_QUOTES, 'UTF-8'), 
    htmlspecialchars($name, ENT_QUOTES, 'UTF-8') 
); 

採用printf()我的個人偏好是讓我的代碼更清晰。

+0

+1。一般來說,OP可以根據實際需要選擇你的'htmlspecialchars()'或我的'htmlentities()'。 – ElmoVanKielmo