极其令人困惑(和愤怒)的PHP/HTML问题


Extremely confusing (And infuriating) PHP/HTML problems

我最近遇到了一些非常令人困惑的问题。

例如,我将有一个代码。这样的:

  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)

编辑:有趣的是,如果我把&amp变成&szlig (ß)这样的东西,效果也很好。

你在重新发明轮子-使用:

$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()是我个人的偏好,使我的代码更清晰