'xMLParseEntityRef: কোনও নাম নেই' পিএইচপি ফাইলে এক্সএমএল লোড করার সময় সতর্কতা


91

আমি পিএইচপি ব্যবহার করে একটি এক্সএমএল পড়ছি simplexml_load_file। তবে এক্সএমএল লোড করার চেষ্টা করার সময় এটি সতর্কতার একটি তালিকা প্রদর্শন করে

Warning: simplexml_load_file() [function.simplexml-load-file]: <project orderno="6" campaign_name="International Relief & Development" project in /home/bluecard1/public_html/test.php on line 3    
Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home/bluecard1/public_html/test.php on line 3    
Warning: simplexml_load_file() [function.simplexml-load-file]: http://..../index.php/site/projects/:15: parser error : xmlParseEntityRef: no name in /home/bluecard1/public_html/test.php on line 3

Warning: simplexml_load_file() [function.simplexml-load-file]: ional Relief & Development" project_id="313" client_name="International Relief & in /home/bluecard1/public_html/test.php on line 3    
Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home/bluecard1/public_html/test.php on line 3    
Warning: simplexml_load_file() [function.simplexml-load-file]: http://..../index.php/site/projects/:15: parser error : xmlParseEntityRef: no name in /home/bluecard1/public_html/test.php on line 3

এই সতর্কতাগুলি সরিয়ে আমি কীভাবে সংশোধন করব?

(এক্সএমএল ইউআরএল থেকে উত্পন্ন http://..../index.php/site/projectsএবং টেস্ট.এফপিতে একটি ভেরিয়েবলের মধ্যে লোড করা হয় index


এক্সএমএল অবৈধ। আপনি এটিকে কিছুতেই লোড করতে সক্ষম নাও হতে পারেন। @সামনে simplexml_load_fileবা পতাকা যুক্ত করে ত্রুটিগুলি দমন করা যেতে পারে , simplexml_load_fileআরও তথ্যের জন্য ম্যানুয়াল পৃষ্ঠাটি দেখুন এবং আপনার প্রশ্নটি মুছুন, এটি একটি সদৃশ।
hakre

আমি দেখতে পাচ্ছি যে আমার উত্তরটি বেশ মনোযোগ পাচ্ছে, যদি আসলেই এর সমাধান হয়: আপনি দয়া করে এটিকে "সঠিক উত্তর" হিসাবে পতাকাঙ্কিত করতে পারেন? ধন্যবাদ
রিগ্রিকুইট

উত্তর:


146

এক্সএমএল সম্ভবত অবৈধ।

সমস্যাটি "&" হতে পারে

$text=preg_replace('/&(?!#?[a-z0-9]+;)/', '&amp;', $text);

"&" থেকে মুক্তি পাবে এবং এটির এইচটিএমএল কোড সংস্করণ দিয়ে প্রতিস্থাপন করবে ... একবার চেষ্টা করে দেখুন।


4
ধন্যবাদ. তুমি আমার দিন বাঁচিয়েছ!
সাইম

4
এক্সএমএলের সাথে কাজ করার সময় সেরা অনুশীলন হ'ল কোনও বিরোধী চরিত্র না থাকার বিষয়টি নিশ্চিত করা এবং পার্সিনের আগে আপনার এগুলি প্রতিস্থাপন করা উচিত
মিঃ

4
ধন্যবাদ, এই প্রশ্নের মূল বিষয় হ'ল এক্সএমএল অবৈধ
ইউসান

কিছুটা সংযোজন, যদি আপনি সমস্ত অ্যাম্পারস্যান্ডগুলি প্রতিস্থাপন করতে চান তবে আপনার রেগেজে 'জি' যুক্ত করুন। আপডেট হওয়া সমাধানটি এর মতো দেখতে পাবেন: $text=preg_replace('/&(?!#?[a-z0-9]+;)/g', '&amp;', $text);
ফ্লেমিংকোডগুলি

81

এটি এখানে পাওয়া গেছে ...

সমস্যা: একটি এক্সএমএল পার্সার ত্রুটিটি প্রদান করে "xMLParseEntityRef: noname"

কারণ: এক্সএমএল পাঠ্যটিতে কোথাও একটি বিভ্রান্ত '&' (এম্পারস্যান্ড চরিত্র) রয়েছে। কিছু পাঠ্য এবং আরও কিছু পাঠ্য

সমাধান:

  • সমাধান 1: এম্পারস্যান্ড সরান।
  • সমাধান 2: এম্পারস্যান্ডটি এনকোড করুন (এটি দিয়ে &অক্ষরটি প্রতিস্থাপন করা হয় &amp;)। এক্সএমএল পাঠটি পড়ার সময় ডিকোড করা মনে রাখবেন।
  • সমাধান 3: সিডিএটিএ বিভাগগুলি ব্যবহার করুন (সিডিএটিএ বিভাগে থাকা পাঠ্য পার্সার দ্বারা উপেক্ষা করা হবে)) উদাহরণস্বরূপ। <! [সিডিএটিএ [কিছু পাঠ্য এবং আরও কিছু পাঠ্য]]>>

দ্রষ্টব্য: '&' '<' '>' সঠিকভাবে পরিচালনা না করলে সমস্তই সমস্যা দেবে।


আমরা জানি কেন এটি হয়? এছাড়াও, কোনও সিডিএটি বিভাগটি এখনও এমন কোনও ব্রাউজার দ্বারা নেওয়া হবে যা এই ডেটাটির কিছু রেন্ডার করবে? আমার এক্সএমএল ট্যাগগুলির ভিতরে আমার কয়েকটি HTML ট্যাগ রয়েছে এবং এডিটিং সরঞ্জামের জন্য এগুলি শেষ ব্যবহারকারীর কাছে রেন্ডার করা দরকার।
সুলিম্মেশ

11

এই ফাংশনটি ব্যবহার করে প্রথমে এইচটিএমএল পরিষ্কার করার চেষ্টা করুন:

$html = htmlspecialchars($html);

বিশেষ অক্ষরগুলি সাধারণত HTML এ আলাদাভাবে উপস্থাপিত হয় এবং এটি সংকলকটির জন্য বিভ্রান্তিকর হতে পারে। মত &হয়ে যায় &amp;


কেউ ব্যাখ্যা করতে পারেন কেন এটিকে নিম্নমানের করা হয়? উপাদান ডেটাতে চরগুলি htmlspecialchars()রূপান্তর করার জন্য সুনির্দিষ্ট ফাংশন &, ", <, >
জ্যাকব্রোসডেভ

7
এই উত্তরটি হ্রাসযুক্ত কারণ এটি এই ক্ষেত্রে ভাল কাজ করে না। এই ফাংশনটি ব্যবহার করা আপনার এক্সএমএলটিকে "<" "" & lt; "তে রূপান্তর করে পুরোপুরি ভেঙে দেবে। আপনি htmlspecialchars()এক্সএমএল না ভাঙতে এবং ব্যবহার করতে পারেন এমন কোনও উপায় সম্পর্কে আমি অসচেতন । আমি কয়েকটি পতাকা চেষ্টা করেছিলাম এবং আমার এক্সএমএল এখনও ভেঙে গেছে।
অ্যালেক্স ফিননার্ন

4
আপনার htmlspecialcharsএক্সএমএল ট্যাগের সামগ্রীতে ব্যবহার করা উচিত , পুরো এক্সএমএলে নয়
গাবলডুজি

7

আমি একটি সম্মিলিত সংস্করণ ব্যবহার:

strip_tags(preg_replace("/&(?!#?[a-z0-9]+;)/", "&amp;",$textorhtml))

4
এই এক নিখুঁতভাবে কাজ করছে। আপনি কেবল শেষ রাইট বন্ধনীটি মিস করছেন
myh34d

7

সমস্যা

  • পিএইচপি ফাংশনটি কোনও URL থেকে এক্সএমএল ফাইল লোড করার চেষ্টা করার সময় simplexml_load_fileপার্সিং ত্রুটি ছুঁড়ে parser error : xmlParseEntityRefদিচ্ছে।

কারণ

  • ইউআরএল দ্বারা ফিরে আসা এক্সএমএল কোনও বৈধ এক্সএমএল নয়। এটির &পরিবর্তে মান রয়েছে &amp;। এটি বেশ সম্ভব যে অন্যান্য ত্রুটিগুলিও রয়েছে যা এই মুহুর্তে সুস্পষ্ট নয়।

আমাদের নিয়ন্ত্রণের জিনিসগুলি

  • আদর্শভাবে, আমাদের নিশ্চিত করা উচিত যে কোনও বৈধ এক্সএমএল পিএইচপি simplexml_load_fileফাংশনে ফিড করা হয়েছে তবে দেখে মনে হচ্ছে এক্সএমএল কীভাবে তৈরি হয় তার উপর আমাদের কোনও নিয়ন্ত্রণ নেই।
  • simplexml_load_fileকোনও অবৈধ এক্সএমএল ফাইল প্রক্রিয়া করার জন্য জোর করাও সম্ভব নয় । এটি এক্সএমএল ফাইলটি নিজেই ঠিক করা ব্যতীত আমাদের সাথে অনেকগুলি বিকল্প রেখে যায় না।

সম্ভাব্য সমাধান

অবৈধ এক্সএমএলকে বৈধ এক্সএমএলে রূপান্তর করুন। এটি ব্যবহার করে করা যেতে পারে PHP tidy extension। আরও নির্দেশাবলী http://php.net/manual/en/book.tidy.php থেকে পাওয়া যাবে

একবার আপনি নিশ্চিত হয়ে যান যে এক্সটেনশানটি বিদ্যমান বা ইনস্টল হয়ে গেছে, দয়া করে নিম্নলিখিতটি করুন।

/**
 * As per the question asked, the URL is loaded into a variable first, 
 * which we can assume to be $xml
 */
$xml = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<project orderno="6" campaign_name="International Relief & Development for under developed nations">
    <invalid-data>Some other data containing & in it</invalid-data>
    <unclosed-tag>
</project>
XML;

/**
 * Whenever we use tidy it is best to pass some configuration options 
 * similar to $tidyConfig. In this particular case we are making sure that
 * tidy understands that our input and output is XML.
 */
$tidyConfig = array (
    'indent' => true,
    'input-xml' => true, 
    'output-xml' => true,
    'wrap' => 200
);

/**
 * Now we can use tidy to parse the string and then repair it.
 */
$tidy = new tidy;
$tidy->parseString($xml, $tidyConfig, 'utf8');
$tidy->cleanRepair();

/**
 * If we try to output the repaired XML string by echoing $tidy it should look like. 

 <?xml version="1.0" encoding="utf-8"?>
 <project orderno="6" campaign_name="International Relief &amp; Development for under developed nations">
      <invalid-data>Some other data containing &amp; in it</invalid-data>
      <unclosed-tag></unclosed-tag>
 </project> 

 * As you can see that & is now fixed in campaign_name attribute 
 * and also with-in invalid-data element. You can also see that the   
 * <unclosed-tag> which didn't had a close tag, has been fixed too.
 */
echo $tidy;

/**
 * Now when we try to use simplexml_load_string to load the clean XML. When we
 * try to print_r it should look something like below.

 SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [orderno] => 6
            [campaign_name] => International Relief & Development for under developed nations
        )

    [invalid-data] => Some other data containing & in it
    [unclosed-tag] => SimpleXMLElement Object
        (
        )

)

 */
 $simpleXmlElement = simplexml_load_string($tidy);
 print_r($simpleXmlElement);

সতর্ক করা

পরিশ্রমী ব্যবহারের পরে কোনও প্রতিকূল পার্শ্ব প্রতিক্রিয়া নেই তা দেখতে বিকাশকারীকে একটি বৈধ এক্সএমএল (পরিপাটি দ্বারা উত্পাদিত) সাথে অবৈধ এক্সএমএল তুলনা করার চেষ্টা করা উচিত। পরিপাটি সঠিকভাবে এটি সম্পাদন করার জন্য একটি খুব ভাল কাজ করে তবে এটিকে চাক্ষুষভাবে দেখার জন্য এবং এটি 100% নিশ্চিত হওয়ার জন্য কখনই ব্যাথা করে না। আমাদের ক্ষেত্রে এটি $ পরিপাটি সঙ্গে $ এক্সএমএল তুলনা করার মতো সহজ হওয়া উচিত।



3

অক্ষরের সাথে ডেটা নিয়ে গোলমাল করার কারণে এটি করা হয়েছে। htmlentities($yourText)আমার জন্য কাজ করে ব্যবহার করা (এক্সএমএল ডকুমেন্টের ভিতরে আমার এইচটিএমএল কোড ছিল)। Http://uk3.php.net/htmlentities দেখুন ।


1

এটি আমার সমস্যা সমাধান করুন:

$description = strip_tags($value['Description']);
$description=preg_replace('/&(?!#?[a-z0-9]+;)/', '&amp;', $description);
$description= preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $description);
$description=str_replace(' & ', ' &amp; ', html_entity_decode((htmlspecialchars_decode($description))));

1

যদি আপনি এই সমস্যাটি ওপেনকার্টের সাথে সম্পাদনা করে দেখুন

ক্যাটালগ / নিয়ন্ত্রণকারী / এক্সটেনশন / ফিড / google_sitemap.php আরও তথ্যের জন্য এবং কীভাবে এটি করতে হয় তা উল্লেখ করুন: xmlparseentityref-no-name-error

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.