我正在尝试使用php解析xml。我建立了与数据库的连接,并尝试使用php获取行,然后将它们输入到谷歌地图的xml标记中。我的名字中有撇号的街道有问题(例如Charles de Gaulle'a):
header('Content-type: application/xml; charset="utf-8"');
echo '<?xml version="1.0" encoding="utf-8"?>';
print "<markers>\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
$location = "<mar ";
$location .= ' LGT=' . "'" . (str_replace(',', '.', $row['Longtitude'])) . "'";
$location .= ' LAT=' . "'" . (str_replace(',', '.', $row['Latitude'])) . "'";
$location .= ' STREET=' . "'" . ($row['STREET']) . "'";
$location .= " />\n";
$output = $location;
print ($output);
}
print "</markers>\n";
当里面没有带撇号的街道时,这样可以正常工作,但是在这条街上它会返回错误:
XML Parsing Error: not well-formed
Location: http://mywebsite.com/parsexml.php
Line Number 5178, Column 141:
问题是如何修复它以便不返回xml解析错误并且生成标记没有任何问题。
谢谢
答案 0 :(得分:2)
您的问题是引号与对该属性进行舍入相同,最后以STREET='Charles de Gaulle'a'
为结尾,因此将它们更改为&#34;而不是&#39; ...
$location .= ' STREET="' . ($row['STREET']) . '"';
可能存在其他字符导致问题的情况,但这应解决您的直接问题。
如果你把它作为一个实际的实体(而不是一个属性)会更好,这将解决大多数问题。所以......
<Street>Charles de Gaulle'a</Street>
答案 1 :(得分:1)
您需要使用htmlentities()对数据进行编码。更改报价只会在使用其他报价时导致问题。你应该总是使用htmlentities()。