用于谷歌地图的XML php:第行出错。。在列..:EntityRef:应为“;”
我曾经在我的网站源中有一个很好的工作XML文件,用于谷歌地图。直到几天前,我才发现这个错误: 此页面包含以下错误: 第2行第10896列出错:EntityRef:应为“;” 下面是第一个错误之前的页面呈现 在此期间,我没有对php文件进行任何更改。还做了一些数据库检查,看起来一切正常,数据库连接正常 我读到一个常见的原因是使用&而不是&。但是在parseToXML中有一个替换函数,所以这不是我想的原因 有什么建议吗 谢谢大家! 标记用于谷歌地图的XML php:第行出错。。在列..:EntityRef:应为“;”,php,xml,google-maps,entityreference,Php,Xml,Google Maps,Entityreference,我曾经在我的网站源中有一个很好的工作XML文件,用于谷歌地图。直到几天前,我才发现这个错误: 此页面包含以下错误: 第2行第10896列出错:EntityRef:应为“;” 下面是第一个错误之前的页面呈现 在此期间,我没有对php文件进行任何更改。还做了一些数据库检查,看起来一切正常,数据库连接正常 我读到一个常见的原因是使用&而不是&。但是在parseToXML中有一个替换函数,所以这不是我想的原因 有什么建议吗 谢谢大家! 标记 使用为工作设计的各种工具生成XML要比手动写出字符串容易
使用为工作设计的各种工具生成XML要比手动写出字符串容易得多,也更可靠。PHP有DOMDocument类,这使得类似这样的任务非常简单,并且需要更少的代码行-/ 如果文本内容包含V形符号或其他字符,它还具有不结巴的优点
<?php
require 'credentials.php';
$conn = new mysqli( $servername, $username, $password, $dbname );
$sql = 'select id, name, address, lat, lng, descrip from people';
$result = $conn->query( $sql );
# generate new DOMDocument & set properties
$dom = new DOMDocument;
$dom->formatOutput = true;
$dom->xmlStandalone = true;
# create the root node and add to the DOM
$root=$dom->createElement('markers');
$dom->appendChild( $root );
# for convenience it is quicker to iterate through this array to generate attributes
# thse correspond to the column names / aliases from the sql query
$attribs=[ 'id', 'name', 'address', 'lat', 'lng', 'descrip' ];
# iterate through recordset, generate new node for each record
while( $row = $result->fetch_object() ) {
#add the new node to DOM
$marker=$dom->createElement('marker');
$root->appendChild( $marker );
#add attributes
foreach( $attribs as $attr ){
$marker->setAttribute( $attr, $row->$attr );
}
}
#save or echo?
header('Content-Type: text/xml');
echo $dom->saveXML();
#$dom->save('/path/to/file.xml');
?>
@CBroe@Kevin,哇,太好了,你发现了这个。事实上,在过去几天里,我们在数据库中找到了一个条目。用户当天在descrip字段中添加了一个文本,其中包含&符号。这将终止XML文件输出。我现在也将parseToXML应用于该描述行,解决了这个问题
@Nigel Ren和所有人都会同意我现在使用的有点不可靠。开放和诚实,会形容我的整个网站设置为摇摇欲坠:-。不过,我们将研究您的建议,以便进一步改进。现在,非常感谢大家 我建议使用适当的api来生成XML,他们更了解XML的局限性,并且比您可能输入的数据更有可能正确编码数据。是的,这就是为什么手动创建XML不可靠的原因,最好使用DOMDocument或SimpleXML,但无论如何,可能是描述有问题,打破了标记您正在应用parseToXML函数htmlspecialchars存在,顺便说一句。仅用于名称和地址字段,但不用于描述…我不知道您有什么类型的数据,但描述字段有时可能包含符号,听起来不那么牵强也许…
<?php
require 'credentials.php';
$conn = new mysqli( $servername, $username, $password, $dbname );
$sql = 'select id, name, address, lat, lng, descrip from people';
$result = $conn->query( $sql );
# generate new DOMDocument & set properties
$dom = new DOMDocument;
$dom->formatOutput = true;
$dom->xmlStandalone = true;
# create the root node and add to the DOM
$root=$dom->createElement('markers');
$dom->appendChild( $root );
# for convenience it is quicker to iterate through this array to generate attributes
# thse correspond to the column names / aliases from the sql query
$attribs=[ 'id', 'name', 'address', 'lat', 'lng', 'descrip' ];
# iterate through recordset, generate new node for each record
while( $row = $result->fetch_object() ) {
#add the new node to DOM
$marker=$dom->createElement('marker');
$root->appendChild( $marker );
#add attributes
foreach( $attribs as $attr ){
$marker->setAttribute( $attr, $row->$attr );
}
}
#save or echo?
header('Content-Type: text/xml');
echo $dom->saveXML();
#$dom->save('/path/to/file.xml');
?>