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());
?>
그리고 여기 오류가 있습니다.
경고: SimpleXMLlement:: addChild() [simplexlement.addchild]: C:\wamp\ww\rabwah\core의 종료되지 않은 엔티티 참조_Coke.jpg입니다.40행의 php
오류는 다음과 같습니다.'$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));
그러나 어떤 이유로 인해 위의 html 특수 문자 기능을 사용하지 않으려는 경우에도 다음을 수행할 수 있습니다(기본적으로 한 단계를 두 단계로 나눕니다).
$xml->addChild($key);
$xml->$key=$value;
저는 어떤 것이 더 빨리 실행될지 모릅니다; 저는 그것이 많은 차이를 만들 것인지 의심스럽지만, 이것은 효과가 있고, 저는 그것이 언급되어야 한다고 생각했습니다.
PS: 개인 프로젝트에 사용하기 때문에 효과가 있다는 것을 알고 있습니다.
변경 시도 -
$product->addchild('image_url','$row[imag_url]');
로.
$product->addchild('image_url',"$row[\"imag_url\"]");
OR
$product->addchild('image_url',$row['imag_url']);
image_url 너무 둥근 EDIT 랩 따옴표, 제공 Barmar
올바른 형식은 다음과 같습니다.
$product->addchild('image_url',htmlspecialchars($row['imag_url']));
언급URL : https://stackoverflow.com/questions/17027043/unterminated-entity-reference-in-php
'programing' 카테고리의 다른 글
| Tomcat/Spring 부트 다시 로드 META-INF/resources/jsp 파일(라이브 업데이트) (0) | 2023.07.26 |
|---|---|
| SQL 또는 MySQL에서 JOIN 키워드를 사용하지 않는 조인에 문제가 있습니까? (0) | 2023.07.26 |
| 인덱스가 생성되고 dbms_stats 계산이 사용된 후 쿼리 실행 속도가 느림 (0) | 2023.07.26 |
| @RequestMapping 주석은 @FeignClient 인터페이스에서 허용되지 않습니다. (0) | 2023.07.26 |
| Java 스프링:'@Value' 주석을 사용하여 'Environment' 속성을 주입하는 방법은? (0) | 2023.07.26 |