PHP无效字符错误 [英] PHP invalid character error

查看:99
本文介绍了PHP无效字符错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

运行此代码时,我收到此错误:
致命错误:未捕获的异常DOMException,在test.php中包含消息无效的字符错误:29堆栈跟踪:#0 test.php(29):DOMDocument-> createElement('1OhmStable','a')#1 {main}在第29行的test.php中抛出

I'm getting this error when running this code: Fatal error: Uncaught exception 'DOMException' with message 'Invalid Character Error' in test.php:29 Stack trace: #0 test.php(29): DOMDocument->createElement('1OhmStable', 'a') #1 {main} thrown in test.php on line 29

原始XML文件中的节点包含无效字符,但是当我从文件中删除无效字符时,应该创建节点。我需要在原始XML文档上执行什么类型的编码?我需要解码saveXML吗?

The nodes that from the original XML file do contain invalid characters, but as I am stripping the invalid characters away from the nodes, the nodes should be created. What type of encoding do I need to do on the original XML document? Do I need to decode the saveXML?

function __cleanData($c) 
{
    return preg_replace("/[^A-Za-z0-9]/", "",$c);
}
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->load('test.xml');    
$xml->formatOutput = true; 

$append = array();
foreach ($xml->getElementsByTagName('product') as $product ) 
    {
        foreach($product->getElementsByTagName('name') as $name ) 
        {

            $append[] = $name;
        }
                foreach ($append as $a)  
                {
                    $nodeName = __cleanData($a->textContent);

                        $element = $xml->createElement(htmlentities($nodeName) , 'a');
                }
        $product->removeChild($xml->getElementsByTagName('details')->item(0));
        $product->appendChild($element);
    }

$result = $xml->saveXML();
$file = "data.xml";
file_put_contents($file,$result);

这是原始XML的样子:

This is what the original XML looks like:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/v1/xsl/xml_pretty_printer.xsl" type="text/xsl"?>
<products>
<product>
<modelNumber>M100</modelNumber>
<itemId>1553725</itemId>
<details>
  <detail>
    <name>1 Ohm Stable</name>
    <value>600 x 1</value>
  </detail>
 </details>
</product>
 </products>

新文档应该是这样的:

 <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/v1/xsl/xml_pretty_printer.xsl" type="text/xsl"?>
<products>
<product>
<modelNumber>M100</modelNumber>
<itemId>1553725</itemId>
  <1 Ohm Stable>

  </1 Ohm Stable>

  </product>
 </products>


推荐答案

只要您不能使用元素名称从数字开头

Simply you can not use an element name start with number

1OhmStable  <-- rename this
_1OhmStable <-- this is fine

php parse xml - error:StartTag:invalid element name

一篇很好的文章: - http://www.xml.com/pub/a/2001/07/25/namingparts.html

A nice article :- http://www.xml.com/pub/a/2001/07/25/namingparts.html


名称是以字母或几个标点符号之一开头的令牌,并以字母,数字,连字符,下划线,冒号或全站,一起称为名称字符。

A Name is a token beginning with a letter or one of a few punctuation characters, and continuing with letters, digits, hyphens, underscores, colons, or full stops, together known as name characters.

这篇关于PHP无效字符错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆