我最近遇到了一些极其令人困惑的问题。
例如我会有一个代码。像这样:
echo "<ID>" . $daten->Firma_ID . "</ID><Name>"
. str_replace(array("&", "<", ">", "\"", "'"),
array("&", "<", ">", """, "'"),
$daten->Name_1. ' '. $daten->Name_2.", ". $daten->Ort)
."</Name>";
这是为了将字符串中的符号转义为HTML代码。 (&amp; - &gt;&amp; amp;)
现在这个输出我的字面意思是“&amp; amp;”。有时。
在代码中我使用相同的方法(完全相同的代码),只是它在那里工作得很好。这真是令人沮丧。
这有什么理由吗?此外,这种情况发生在所有浏览器上(经过测试的IE,Chrome和Firefox)
编辑:有趣的是,如果我将&amp; amp改为像&amp; szlig(ß)这样的东西也可以。这似乎只发生在特定时间的&amp; amp。
答案 0 :(得分:4)
你正在重新发明轮子 - 只需使用:
$str_with_entities = htmlentities($str);
正如documentation所说。
如果您希望浏览器显示$amp;
:
$str_with_entities = htmlentities(htmlentities($str));
答案 1 :(得分: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()
是我个人的偏好,可以让我的代码更清晰。