下面是我的代码:
<?php
// 27/01/2016 Edit:
$result = mysql_query("A Long mysql query");
$rss = new SimpleXMLElement('<rss version="2.0" />');
$products = $rss->addChild('products');
///
while($row = mysql_fetch_array($result)){
$product = $products->addChild('category');
$product->addChild('product_id',"$row[product_id]");
$product->addChild('cat_id',"$row[cat_id]");
$product->addChild('cat_name',"$row[cat_name]");
$product->addchild('product_code',"$row[product_code]");
$product->addchild('product_name',"$row[product_name]");
$product->addChild('description','$row[description]');
$product->addchild('rating',"$row[rating]");
$product->addchild('image_url','$row[imag_url]');
$product->addchild('price',"$row[price]");
$product->addchild('discount',"$row[discount]");
$product->addchild('stock_status',"$row[stock_status]");
$product->addchild('stock_quantity',"$row[stock_quantity]");
$product->addchild('weight',"$row[weight]");
$product->addchild('length',"$row[length]");
$product->addchild('width',"$row[width]");
$product->addchild('height',"$row[height]");
$product->addchild('colour',"$row[colour]");
$product->addchild('size',"$row[size]");
$product->addchild('material',"$row[material]");
$product->addchild('pattern',"$row[pattern]");
};
Header('Content-type: text/xml');
print($rss->asXML());
?>
,这里是错误:
警告:SimpleXMLElement::addChild() [SimpleXMLElement。在C:'wamp'www'rabwah'core.php中引用_Coke.jpg
错误在'$row[imag_url]'
行
正确编码& < >
和"" ''
$parent->addChild($name, htmlspecialchars($value));
SimpleXMLElement
实际上是一个系统资源,其行为类似于对象。这使得处理循环变得棘手。所以当尝试添加新的子元素时而不是:
$product->addchild('element', $value);
这样做:
$product->element = $value;
或者您可以使用htmlspecialchars()
来转义html字符。
注意:
mysql_*
在php-5.5中被弃用,在php-7中被删除。因此,请使用mysqli_*
或PDO
。
为什么我不能在PHP中使用mysql_*函数?
我的解决方案是专门创建一个文本节点,它确保绝对所有内容都被正确转义:
$cell = $dom->createElement('td');
$cell->appendChild($dom->createTextNode($value));
如果您使用新创建的节点,您可以通过访问{0}属性来设置值。这应该转义任何特殊字符。
$childNode = $parent->addChild($name);
$childNode{0} = $value;
很抱歉我又提了一个老问题,但是有另一个解决方案。假设以下代码导致"未终止实体引用"错误:
$xml->addChild($key,$value);
@Joel-Davey的解决方案非常有效:
$xml->addChild($key,htmlspecialchars($value));
但是,如果出于某种原因,你不想使用上面的htmlspecialchars函数(基本上,你把一个步骤分成两个步骤),你也可以这样做:
$xml->addChild($key);
$xml->$key=$value;
我不知道哪一个会执行得更快;我怀疑它会有多大的不同,但是,这是有效的,我认为应该提到它
PS:我知道它的工作,因为我使用它在一个个人项目
尝试更改-
$product->addchild('image_url','$row[imag_url]');
$product->addchild('image_url',"$row['"imag_url'"]");
或
$product->addchild('image_url',$row['imag_url']);
编辑
正确的格式是:
$product->addchild('image_url',htmlspecialchars($row['imag_url']));