Intereting Posts

ссылка на неиспользуемый объект 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

Th ошибка в строке с '$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 .
Почему я не должен использовать функции mysql_ * в PHP?

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

 $cell = $dom->createElement('td'); $cell->appendChild($dom->createTextNode($value)); 

Извините за восстановление старого вопроса, но есть и другое решение. Предполагая, что следующий код вызывает ошибку «unterminited entity reference»:

 $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']); 

EDIT wrap цитирует слишком круглый image_url, любезно предоставил Barrmar

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

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