-1

我正在尝试使用 codeigniter & php 将我的 xml 文件中的数据保存到 mysql 数据库中。但是我找不到一种方法来转义特殊的 xml 字符以将我的数据从 xml 文件保存到我的表 cache_table 中。

 Code:

 $xml_source = str_replace(array("&", "&"), array("&", "&"),file_get_contents('XML/customer.xml'));

$xml = simplexml_load_string($xml_source);  
foreach($xml as $row )
{
 $attr = $row->attributes();

$results[] = array('CustomerAccountNumber' => $this->db->escape_str($attr->CustomerAccountNumber),'Desciption' => $this->db->escape_str($attr->Desciption) ):

$this->db->insert_batch('cache_cust',$results); 

但我收到此错误:

错误:

simplexml_load_string():实体:第 37 行:解析器错误:属性值中不允许未转义的“<”。

客户.xml

<?xml version="1.0" standalone="yes"?>
<Rows>
<Row CustomerAccountNumber="12" Name="Arj" Desciption="PJ psm" />  
<Row CustomerAccountNumber="1" Name="Aj" Desciption="*/Artic" />
<Row CustomerAccountNumber="2" Name="smla" Desciption="& light" />
<Row CustomerAccountNumber="3" Name="alik" Desciption="*/Artic" />
<Row CustomerAccountNumber="4" Name="wqla" Desciption="" />
<Row CustomerAccountNumber="5" Name="walij" Desciption="16-17" />
<Row CustomerAccountNumber="6" Name="li" Desciption="sales@llil.com" />
</Rows>

如何避免此错误并避免特殊的 xml 字符,以便我的代码将 xml 文件中的所有记录保存到数据库中?

4

3 回答 3

2

您将需要查看要编码的 htmlentities 和 html_entity_decode 以恢复它们。使用 htmlentities 将让您不必担心单独替换每个特殊字符(如&符号),它也会替换箭头。我相信 escape_str 会为您处理报价。

以下链接中的文档可以帮助您解决任何未解答的问题。

http://php.net/manual/en/function.htmlentities.php

http://www.php.net/manual/en/function.html-entity-decode.php

于 2012-11-26T17:19:10.770 回答
0

错误说明了一切:

Unescaped '<' not allowed in attributes values.

所以你的 XML 无效。它最初是如何被破坏的?大概是因为这个:

$xml_source = str_replace(array("&amp;", "&"), array("&", "&amp;"),file_get_contents('XML/customer.xml'));
于 2012-11-26T17:04:59.263 回答
0

ActiveRecord 将负责转义带有引号字符的字符串,即', "。因此,您不必显式使用mysql_real_escape_string() 之类的东西。其他 XML 字符也可以,不必转义<,例如>.

此外,您(或其他人)在 XML 属性中拼写“描述”错误。

于 2012-11-26T17:14:03.173 回答