2013-06-10 8 views
20

यहाँ मेरी कोड है:समाप्त नहीं की गई एंटिटी संदर्भ 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()); 
?> 

और यहाँ त्रुटि है:

Warning: SimpleXMLElement::addChild() [simplexmlelement.addchild]: unterminated entity reference _Coke.jpg in C:\wamp\www\rabwah\core.php on line 40

गु त्रुटि '$row[imag_url]' साथ कतार में है। बदलकर

+3

* अनिवार्य पर यह उपयोग कर रहा हूँ पता है: * 'mysql_ *' फ़ंक्शंस [PHP 5.5 में बहिष्कृत किया जाएगा] (http://php.net/manual/en/faq.databases.php#faq.databases.mysql.deprecated)। नए कोड को लिखने के लिए इसकी अनुशंसा नहीं की जाती है क्योंकि इसे भविष्य में हटा दिया जाएगा। इसके बजाए, या तो [MySQLi] (http://php.net/manual/en/book.mysqli.php) या [पीडीओ] (http://php.net/manual/en/book.pdo.php) और [एक बेहतर PHP डेवलपर बनें] (http://jason.pureconcepts.net/2012/08/better-php-developer/)। –

+0

''$ पंक्ति [imag_url]'' 'पंक्ति होना चाहिए [imag_url]" '। सिंगल कोट्स को डबल कोट्स में बदलें। इसके अलावा आप '/>' 'rss-> addChild ('

+0

पता नहीं है कि यह यहां प्रासंगिक है या नहीं, लेकिन 'addChild' यह तरीका' addchild' 'नहीं है, यह लाइन '$ product = $ rss-> addChild (' Orangepill

उत्तर

58

यह सही ढंग से & < > और "" ''

$parent->addChild($name, htmlspecialchars($value)); 
0

प्रयास करें -

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

करने के लिए

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

या

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

संपादित चादर भी दौर image_url उद्धरण, शिष्टाचार Barrmar

36

SimpleXMLElement वास्तव में एक सिस्टम संसाधन है जो किसी ऑब्जेक्ट की तरह व्यवहार करता है। जो लूप के साथ काम करना मुश्किल बनाता है। तो जब नए बच्चे तत्वों को जोड़ने की कोशिश कर रहा बजाय इस की:

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

ऐसा करते हैं:

$product->element = $value; 

या आप htmlspecialchars() उपयोग कर सकते हैं, एचटीएमएल पात्रों से बचने के लिए।

नोट:

mysql_* के रूप में पदावनत और के रूप में निकाल दिया जाता है। तो इसके बजाय mysqli_* या PDO का उपयोग करें।
Why shouldn't I use mysql_* functions in PHP?

3

मेरा समाधान विशेष रूप से एक टेक्स्ट नोड बना रहा है, जो सुनिश्चित करता है कि बिल्कुल सब कुछ ठीक से बच निकला है।

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

है यह SimpleXMLElement नहीं है, यह DOMDocument है। – ermannob

+0

@ermannob DOMDocument में वास्तव में 'createTextNode' विधि है: http://php.net/manual/en/domdocument.createtextnode.php –

0

सही रूप है encodes: एक पुराने सवाल को पुनर्जीवित करने के लिए

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

क्षमा करें, लेकिन इस के लिए एक समाधान है ..

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

@ योएल-डेवी के समाधान बहुत अच्छी तरह से काम करता है:: निम्नलिखित कोड "समाप्त नहीं की गई एंटिटी संदर्भ" त्रुटि का कारण बनता है मान लिया जाये कि

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

लेकिन क्या आप भी किसी कारण से, यदि निम्न कर सकते हैं,

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

मैं पता नहीं जो एक पर अमल होगा: आप ऊपर htmlspecialchars फ़ंक्शन का उपयोग नहीं करना चाहते हैं (मूल रूप से, आप दो चरणों में एक कदम विभाजित) और तेज; मैं शक यह बहुत अधिक अंतर बनाने चाहते हैं, लेकिन, इस काम करता है, और मैं सोचा था कि यह

पुनश्च उल्लेख किया जाना चाहिए: मैं यह काम करता है क्योंकि मैं एक personal project

+0

बिल्कुल! मेरे (बहुत ही बुनियादी) परीक्षणों में दूसरा ** की तुलना में ** सुपर-टिनी ** बिट अधिक मेमोरी का उपयोग करता है, लेकिन ऐसा लगता है कि ** सुपर-टिनी ** बिट तेज – Peter

+0

@ mega6382: मैंने व्यक्तिगत रूप से एक लिंक जोड़ा प्रोजेक्ट, आप इसे 'जंगली में' कार्रवाई में देख सकते हैं – Peter

संबंधित मुद्दे