º,又名男性序数指标,打破PHP中的XML节点创建

时间:2014-09-12 15:16:56

标签: php mysql xml

以下是一些从MySQL DB调用创建XML节点的PHP代码。除了男性序数指示符º打破代码之外,它的效果很好。任何建议或提示将不胜感激。提前谢谢!

代码

$result = mysql_query("SELECT street FROM Addresses");
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->create_element("marker");
  $newnode = $parnode->append_child($node);
  $newnode->set_attribute("street", $row['street']);
}

$row['street']的条目看起来像Nº111-E AVENIDA FOO时,代码会中断。

预期结果

<markers><marker street="Nº111-E AVENIDA FOO" /></markers>

实际(破碎)结果

<markers><marker street="N

它打破º。我尝试过使用utf8_encode($row['street'])htmlentities($row['street']),但都没有帮助。

手动输入字符

奇怪的是,如果手动添加地址,如下所示,代码效果很好,事实上,º会自动转换为HTML编码&#xBA;

$result = mysql_query("SELECT street FROM Addresses");
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->create_element("marker");
  $newnode = $parnode->append_child($node);
  $newnode->set_attribute("street", "Nº111-E AVENIDA FOO");
}

手动输入º时的结果:

<markers><marker street="N&#xBA;111-E AVENIDA FOO" /></markers>

2 个答案:

答案 0 :(得分:0)

Bah,在发布之后,我发现问题出在其他地方。 htmlentities($row['street'])工作正常。

最终代码

$result = mysql_query("SELECT street FROM Addresses");
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->create_element("marker");
  $newnode = $parnode->append_child($node);
  $newnode->set_attribute("street", htmlentities($row['street']));
}

如果mods认为这是一个无用的帖子,请继续删除它。否则,我会留下它以防万一其他人发现它有用。

答案 1 :(得分:0)

这似乎是您正在使用的库中的错误。使用PHPs DOM扩展测试它可以正常工作:

$dom = new DOMDocument();
$markers = $dom->appendChild($dom->createElement('markers'));
$markers
  ->appendChild($dom->createElement('marker'))
  ->setAttribute('street', 'Nº111-E AVENIDA FOO');

echo $dom->saveXml();

输出:https://eval.in/192358

<?xml version="1.0"?>
<markers><marker street="N&#xBA;111-E AVENIDA FOO"/></markers>