提问人:Mark Geenevasen 提问时间:7/15/2020 最后编辑:meewogMark Geenevasen 更新时间:7/15/2020 访问量:677
用于谷歌地图的 XML php:在线错误。在列 ..: EntityRef: expecting ';'
XML php for google maps: error on line .. at column ..: EntityRef: expecting ';'
问:
我曾经在我的网站上有一个很好的工作XML文件(谷歌地图的来源)。直到几天前才出现此错误:
此页面包含以下错误: 第 2 行第 10896 列出错:EntityRef:预期为“;” 下面是页面的渲染,直到第一个错误。
在那段时间里,我没有对 php 文件进行更改。还做了一些数据库检查,一切似乎都井井有条(数据库连接工作正常)。
我读到一个常见的原因是使用 & 而不是 & 。但是在其中有一个替换功能,所以这不可能是我所想的原因。parseToXML
有什么提示吗?
谢谢!
马克
require("credentials.php");
function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$xmlStr);
return $xmlStr;
}
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, name, address, lat, lng, descrip FROM people";
$result = $conn->query($sql);
header("Content-type: text/xml");
// Start XML file, echo parent node
echo '<markers>';
$ind=0;
// Iterate through the rows, printing XML nodes for each
while($row = $result->fetch_assoc()) {
// Add to XML document node
echo '<marker ';
echo 'id="' . $row['id'] . '" ';
echo 'name="' . parseToXML($row['name']) . '" ';
echo 'address="' . parseToXML($row['address']) . '" ';
echo 'lat="' . $row['lat'] . '" ';
echo 'lng="' . $row['lng'] . '" ';
echo 'descrip="' . $row['descrip'] . '" ';
echo '/>';
$ind = $ind + 1;
}
// End XML file
echo '</markers>';
答:
0赞
Professor Abronsius
7/15/2020
#1
与手动写出字符串相比,使用为作业设计的各种工具生成 XML 要容易得多,也更可靠。PHP有一个类,它使这样的任务变得非常简单,并且需要更少的代码行;-/
如果文本内容包含 V 形或其他字符,它还具有不会卡顿的好处DOMDocument
<?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');
?>
0赞
Mark Geenevasen
7/15/2020
#2
@CBroe @Kevin,哇,太好了,你发现了这个。确实在过去几天中发现,在数据库中进行了一个条目。当天,一位用户在字段中添加了一个文本,其中包含 & 符号。这扼杀了 XML 文件输出。我现在也申请了那条线,解决了问题。descrip
parseToXML
descrip
@Nigel 任和所有人都会同意我现在使用的东西有点不稳定。开放和傲慢,会将我的整个网站设置描述为“不稳定”:-)。不过,会研究您的建议,以进一步改进。现在,非常感谢大家!
评论
DOMDocument
SimpleXML
parseToXML
htmlspecialchars
name
address
descrip