нераскрытая ссылка на сущность php


Вот мой код:

<?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.addchild]: ссылка на объект без изменений _Coke.jpg в C:\wamp\www\rabwah\core.php в строке 40

Ошибка находится в строке с '$row[imag_url]'.

Author: Mehravish Temkar, 2013-06-10

6 answers

Это правильно кодирует & < > и "" ''

$parent->addChild($name, htmlspecialchars($value));
 81
Author: Joel Davey, 2017-10-10 14:36:12

SimpleXMLElement на самом деле это системный ресурс, который ведет себя как объект. Что усложняет работу с циклами. Поэтому при попытке добавить новые дочерние элементы вместо этого:

$product->addchild('element', $value);

Сделайте это:

$product->element = $value;

Или вы можете использовать htmlspecialchars(), чтобы избежать символов html.

Примечание:

mysql_* устарел с php-5.5 и удален с php-7. Поэтому вместо этого используйте mysqli_* или PDO.
Почему я не должен использовать функции mysql_* в PHP?

 37
Author: mega6382, 2017-12-18 05:34:05

Мое решение этой проблемы заключается в создании текстового узла, который гарантирует, что абсолютно все экранировано правильно.

$cell = $dom->createElement('td');
$cell->appendChild($dom->createTextNode($value));
 4
Author: Kavi Siegel, 2014-08-17 15:35:15

Извините за возрождение старого вопроса, но есть другое решение этого вопроса.. Предполагая, что следующий код вызывает ошибку "ссылка на объект без изменений":

$xml->addChild($key,$value); 

@Решение Джоэла-Дейви работает очень хорошо:

$xml->addChild($key,htmlspecialchars($value)); 

Но вы также можете сделать следующее, если по какой-то причине вы не хотите использовать вышеупомянутую функцию htmlspecialchars (в основном, вы разделяете один шаг на два шага):

$xml->addChild($key); 
$xml->$key=$value; 

Я понятия не имею, какой из них будет выполняться быстрее; я сомневаюсь, что это будет иметь большое значение разница, но это работает, и я подумал, что об этом следует упомянуть

PS: я знаю, что это работает, потому что я использую его в личном проекте

 1
Author: Peter, 2017-11-07 08:08:00

Попробуйте изменить -

$product->addchild('image_url','$row[imag_url]');

До

$product->addchild('image_url',"$row[\"imag_url\"]");

ИЛИ

$product->addchild('image_url',$row['imag_url']);

РЕДАКТИРОВАТЬ обертывание кавычек слишком округлым image_url, любезно Бармар

 0
Author: swapnesh, 2017-05-23 12:02:43

Правильная форма:

$product->addchild('image_url',htmlspecialchars($row['imag_url']));
 0
Author: Eolia, 2017-10-24 17:01:22