我最近遇到了一些非常令人困惑的问题。
例如,我将有一个代码。这样的:
echo "<ID>" . $daten->Firma_ID . "</ID><Name>"
. str_replace(array("&", "<", ">", "'"", "'"),
array("&", "<", ">", """, "'"),
$daten->Name_1. ' '. $daten->Name_2.", ". $daten->Ort)
."</Name>";
用于将字符串中的符号转义为HTML代码。(,->,amp;)
现在输出给我的是字面上的"&"。有时候。
进一步在代码中,我使用相同的方法(完全相同的代码),只是它在那里工作得很好。这真是令人沮丧。
这可能有什么原因吗?此外,这发生在所有浏览器(已测试的IE, Chrome和Firefox)
编辑:有趣的是,如果我把&变成ß (ß)这样的东西,效果也很好。
你在重新发明轮子-使用:
$str_with_entities = htmlentities($str);
如文档所述。
如果你想让浏览器显示$amp;
:
$str_with_entities = htmlentities(htmlentities($str));
转义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()
是我个人的偏好,使我的代码更清晰