GVKun编程网logo

错误:“输入的UTF-8输入不正确,表示编码!” 使用PHP的simplexml_load_string(utf8towcs里输入的不对)

5

想了解错误:“输入的UTF-8输入不正确,表示编码!”使用PHP的simplexml_load_string的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于utf8towcs里输入的不对的相

想了解错误:“输入的UTF-8输入不正确,表示编码!” 使用PHP的simplexml_load_string的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于utf8towcs里输入的不对的相关问题,此外,我们还将为您介绍关于PHP simplexml_load_string() 函数、php simplexml_load_string() 函数把 XML 字符串载入对象中、PHP simplexml_load_string()函数实例讲解、php – Simplexml_load_string($string)返回一个空对象,但$string包含xml?代码如下的新知识。

本文目录一览:

错误:“输入的UTF-8输入不正确,表示编码!” 使用PHP的simplexml_load_string(utf8towcs里输入的不对)

错误:“输入的UTF-8输入不正确,表示编码!” 使用PHP的simplexml_load_string(utf8towcs里输入的不对)

如何解决错误:“输入的UTF-8输入不正确,表示编码!” 使用PHP的simplexml_load_string?

您的0xED 0x6E 0x2C 0x20字节对应于ISO-8859-1中的“ín”,因此您的内容似乎在ISO-8859-1中,而不是UTF-8。告诉您的数据提供商并请他们修复它,因为如果它对您不起作用,那么对其他人也可能不起作用。

现在有几种解决方法,只有 时才应使用。其中之一将是使用utf8_encode()。不利之处在于,如果该XML同时包含有效的UTF-8和某些ISO-8859-1,则结果将包含mojibake。或者,您可以尝试使用iconv()或mbstring 将字符串从UTF-8转换为UTF-8 ,希望他们会为您解决。(它们不会,但是您至少可以忽略无效字符,以便可以加载XML)

或者,您可以走很长的路,自己验证/修复序列。这将需要一段时间,具体取决于您对UTF-8的熟悉程度。也许有图书馆可以做到这一点,尽管我什么都不知道。

无论哪种方式,都请通知数据提供者他们正在发送无效数据,以便他们可以对其进行修复。

这是部分修复。它绝对不会修复所有问题,但会修复其中的一些问题。希望您能满意为止,直到您的提供者修复他们的东西为止。

function fix_latin1_mangled_with_utf8_maybe_hopefully_most_of_the_time($str)
{
    return preg_replace_callback(''#[\\xA1-\\xFF](?![\\x80-\\xBF]{2,})#'', ''utf8_encode_callback'', $str);
}

function utf8_encode_callback($m)
{
    return utf8_encode($m[0]);
}

解决方法

我收到错误消息:

parser error : Input is not proper UTF-8,indicate encoding ! Bytes: 0xED 0x6E 0x2C 0x20

尝试使用simplexml_load_string第三方来源处理XML响应时。原始XML响应确实声明了内容类型:

<?xml version="1.0" encoding="UTF-8"?>

但是,似乎XML并不是真正的UTF-8。XML内容的语言是西班牙语,并且包含类似DublínXML的单词。

我无法让第三方来整理他们的XML。

如何预处理XML并解决编码不兼容的问题?

有没有一种方法可以检测XML文件的正确编码?

PHP simplexml_load_string() 函数

PHP simplexml_load_string() 函数

实例

转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素:

<?PHP
$note=<<<XML
<note>高佣联盟 www.cgewang.com
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML;

$xml=simplexml_load_string($note);
print_r($xml);
?>

定义和用法

simplexml_load_string() 函数转换形式良好的 XML 字符串为 SimpleXMLElement 对象。


语法

simplexml_load_string(data,classname,options,ns,is_prefix);
参数描述
data 必需。规定形式良好的 XML 字符串。
classname 可选。规定新对象的 class。
options 可选。规定附加的 Libxml 参数。通过指定选项为 1 或 0(TRUE 或 FALSE,例如 LIBXML_NOBLANKS(1))进行设置。

可能的值:

  • LIBXML_COMPACT - 激活节点的优化配置(可加速应用程序)
  • LIBXML_DTDATTR - 设置默认的 DTD 属性
  • LIBXML_DTDLOAD - 装载额外的子集
  • LIBXML_DTDVALID - 验证 DTD 有效性
  • LIBXML_NOBLANKS - 删除空节点
  • LIBXML_NOCDATA - 将 CDATA 设置为文本节点
  • LIBXML_NOEMPTYTAG - 扩展空标签(例如 <br/> 到 <br></br>),仅在 DOMDocument->save() 和 DOMDocument->saveXML() 函数中有效
  • LIBXML_NOENT - 替代实体
  • LIBXML_NOERROR - 不显示错误报告
  • LIBXML_NONET - 装载文档时停止访问网络
  • LIBXML_NowARNING - 不显示警告报告
  • LIBXML_NOXMLDECL - 当存储一个文档时放弃 XML 声明
  • LIBXML_NSCLEAN - 删除多余的名称空间声明
  • LIBXML_PARSEHUGE - 设置 XML_PARSE_HUGE 标志,用来放宽解析器的任何强制限制。这将影响诸如文档的最大深度和文本节点大小限制等。
  • LIBXML_XINCLUDE - 使用 XInclude 替代
  • LIBXML_ERR_ERROR - 获取可纠正的错误
  • LIBXML_ERR_FATAL - 获取致命错误
  • LIBXML_ERR_NONE - 不获取错误
  • LIBXML_ERR_WARNING - 获取简单警告
  • LIBXML_VERSION - 获取 libxml 版本(例如 20605 或 20617)
  • LIBXML_DottED_VERSION - 获取带点的 libxml 版本(例如 2.6.5 或 2.6.17)
ns 可选。规定命名空间前缀或 URI。
is_prefix 可选。规定一个布尔值。如果 ns 是前缀则为 TRUE,如果 ns 是 URI 则为 FALSE。默认是 FALSE。

技术细节

返回值: 如果成功则返回 SimpleXMLElement 对象,如果失败则返回 FALSE。
PHP 版本: 5+


更多实例

实例 1

输出 XML 字符串中每个元素的数据:

<?PHP
$note=<<<XML
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML;

$xml=simplexml_load_string($note);
echo $xml->to . "<br>";
echo $xml->from . "<br>";
echo $xml->heading . "<br>";
echo $xml->body;
?>

实例 2

输出 XML 字符串中每个子节点的元素名称和数据:

<?PHP
$note=<<<XML
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
XML;

$xml=simplexml_load_string($note);
echo $xml->getName() . "<br>";

foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br>";
}
?>

php simplexml_load_string() 函数把 XML 字符串载入对象中

php simplexml_load_string() 函数把 XML 字符串载入对象中

simplexml_load_string()函数将格式良好的XML字符串转换为SimpleXMLElement对象。

语法

PHP的语法simplexml_load_string()函数具有以下语法。

simplexml_load_string(data,classname,options,ns,is_prefix);

参数

参数

是必须的

描述

数据

需要。

一个格式正确的XML字符串

班级名称

可选的。

新对象的类

选项

可选的。

额外的Libxml参数。通过指定选项和1或0(TRUE或FALSE,例如LIBXML_NOBLANKS(1))来设置

ns

可选的。

命名空间前缀或URI

is_prefix

可选的。

如果ns是前缀,则为TRUE。如果ns是URI,则为FALSE。默认值为FALSE

选项的可能值:

LIBXML_COMPACT - 激活节点分配优化(可加速应用程序)

LIBXML_DTDATTR - 设置默认DTD属性

LIBXML_DTDLOAD - 加载外部子集

LIBXML_DTDVALID - 使用DTD进行验证

LIBXML_NOBLANKS - 删除空白节点

LIBXML_NOCDATA - 将CDATA合并为文本节点

LIBXML_NOEMPTYTAG - 展开空标记(例如对
),仅在DOMDocument-> save()和DOMDocument-> saveXML()函数中可用

LIBXML_NOENT - 替代实体

LIBXML_NOERROR - 不显示错误报告

LIBXML_NONET - 加载文档时禁用网络访问

LIBXML_NowARNING - 不显示警告报告

LIBXML_NOXMLDECL - 保存文档时删除XML声明

LIBXML_NSCLEAN - 删除多余的命名空间声明

LIBXML_PARSEHUGE - 设置XML_PARSE_HUGE标志,放宽解析器的任何硬编码限制。这会影响极限,如文档的最大深度和文本节点大小的限制

LIBXML_XINCLUDE - 实现XInclude替换

LIBXML_ERR_ERROR - 获取可恢复的错误

LIBXML_ERR_FATAL - 获取致命错误

LIBXML_ERR_NONE - 获取无错误

LIBXML_ERR_WARNING - 获取简单的警告

LIBXML_VERSION - 获取libxml版本

LIBXML_DottED_VERSION - 获取点分的libxml版本

返回值

成功时返回SimpleXMLElement对象。失败时为FALSE。

实例1

将格式良好的XML字符串转换为SimpleXMLElement对象,然后输出该对象的键和元素:

PHP

Java

XML;

$xml=simplexml_load_string($note);

print_r($xml);

?>

上面的代码生成以下结果。

SimpleXMLElement Object

(

[name] => Array

(

[0] => PHP

[1] => Java

)

)

实例2

输出XML字符串中每个元素的数据:

PHP

Java

XML;

$xml=simplexml_load_string($note);

echo $xml->to . "n";

echo $xml->from . "n";

echo $xml->heading . "n";

echo $xml->body;

?>

实例3

在XML字符串中为每个子节点输出元素的名称和数据:

PHP

Java

XML;

$xml=simplexml_load_string($note);

echo $xml->getName() . "n";

foreach($xml->children() as $child){

echo $child->getName() . ": " . $child . "n";

}

?>

上面的代码生成以下结果。

book

name: PHP

name: Java

PHP simplexml_load_string()函数实例讲解

PHP simplexml_load_string()函数实例讲解

PHP simplexml_load_string() 函数

实例

转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素:

<?php 
$note=<<<XML
<note> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don''t forget me this weekend!</body> 
</note> 
XML;
$xml=simplexml_load_string($note); 
print_r($xml); 
?>

定义和用法

simplexml_load_string()函数转换形式良好的 XML 字符串为 SimpleXMLElement 对象。

语法

simplexml_load_string( _data,classname,options,ns,is_prefix_ );

实例 1

输出 XML 字符串中每个元素的数据:

<?php 
$note=<<<XML 
<note> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don''t forget me this weekend!</body> 
</note> 
XML;
$xml=simplexml_load_string($note); 
echo $xml->to . "<br>"; 
echo $xml->from . "<br>"; 
echo $xml->heading . "<br>"; 
echo $xml->body; 
?>

实例 2

输出 XML 字符串中每个子节点的元素名称和数据:

<?php 
$note=<<<XML 
<note> 
<to>Tove</to> 
<from>Jani</from> 
<heading>Reminder</heading> 
<body>Don''t forget me this weekend!</body> 
</note> 
XML;
$xml=simplexml_load_string($note); 
echo $xml->getName() . "<br>"; 
foreach($xml->children() as $child) 
{ 
echo $child->getName() . ": " . $child . "<br>"; 
} 
?>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文章:
  • PHP安装memcache扩展的步骤讲解
  • PHP配置ZendOpcache插件加速
  • PHP convert_uudecode()函数讲解
  • PHP安装BCMath扩展的方法
  • PHP convert_cyr_string()函数讲解
  • PHP chunk_split()函数讲解
  • PHP chr()函数讲解
  • PHP chop()函数讲解
  • PHP bin2hex()函数基础实例讲解
  • PHP count_chars()函数讲解

php – Simplexml_load_string($string)返回一个空对象,但$string包含xml?代码如下

php – Simplexml_load_string($string)返回一个空对象,但$string包含xml?代码如下

我使用xml格式的cURL检索一些信息.

....

$xml = curl_exec($ch);

$data = simplexml_load_string($xml);
print_r($data);
//out put - SimpleXMLElement Object ( ) 

如果我尝试 – print_r($xml);并查看页面源
我明白了

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ns7:users xmlns="http://www.example.com/xml/ns/rs" 
        xmlns:ns2="http://www.example.com/xml/ns/users" 
        xmlns:ns3="http://www.example.com/2004/11/tHistory" 
        xmlns:ns4="http://www.example.com/fsi/tHistory" 
        xmlns:ns5="http://www.example.com/2005/10/tHistory" 
        xmlns:ns6="http://www.example.com/2010/03/cs" 
        xmlns:ns7="http://www.example.com/2005/10/users" 
        xmlns:ns8="http://www.example.com/2010/03/tHistory">
    <ns7:user><ns7:id>Matt.Smith</ns7:id>
    <ns7:lastName>Smith</ns7:lastName>
    <ns7:firstName>Matt</ns7:firstName>
    <ns7:otherName></ns7:otherName>
    <ns7:gender>male</ns7:gender>
    <ns7:email>matt@company.co.uk</ns7:email>
    <ns7:locale>en</ns7:locale>
    <ns7:role><ns7:id>A</ns7:id>
    <ns7:name>System Administrator</ns7:name></ns7:role>
    <ns7:employeeNumber></ns7:employeeNumber>
    <ns7:organization>
        <ns7:id>8000</ns7:id>
        <ns7:name>Organisation Title</ns7:name>
    </ns7:organization>
    <ns7:organization>
        <ns7:id>20707</ns7:id>
        <ns7:name>London Office</ns7:name>
    </ns7:organization>
    <ns7:attribute>
        <ns7:code>0</ns7:code>
        <ns7:description>Unassigned</ns7:description>
    </ns7:attribute>
    <ns7:attribute>
        <ns7:code>0</ns7:code>
        <ns7:description>Unassigned</ns7:description>
    </ns7:attribute>
    <ns7:attribute>
        <ns7:code></ns7:code>
        <ns7:description>Unassigned</ns7:description>
    </ns7:attribute>
    <ns7:attribute>
        <ns7:code></ns7:code>
        <ns7:description>Unassigned</ns7:description></ns7:attribute>
        <ns7:attribute><ns7:code></ns7:code>
        <ns7:description>Unassigned</ns7:description>
    </ns7:attribute>
    <ns7:attribute>
        <ns7:code></ns7:code>
        <ns7:description>Unassigned</ns7:description>
        </ns7:attribute>
    <ns7:attribute>
        <ns7:code></ns7:code>
        <ns7:description>Unassigned</ns7:description>
    </ns7:attribute>
    <ns7:attribute>
        <ns7:code></ns7:code>
        <ns7:description>Unassigned</ns7:description>
    </ns7:attribute>
    </ns7:user>
</ns7:users>

这个xml全部在一行中,我手动输入了换行符,使其可读.

解决方法:

更新:要打印firstname(或任何其他),您可以使用the usual SimpleXML addressing mechanisms.您的情况稍微复杂一点,因为您正在使用名称空间.仍然可行 – 尝试一些like this:

$data->children('ns7', true)->user[0]->lastName

re:我期待print_r($data)打印就好像它是一个数组[…]:这种期望是错误的.它肯定会很方便,但这不是它的工作原理.要打印SimpleXML对象的xml字符串表示形式,请使用asXML().

更新结束

你期望print_r($data)打印什么? SimpleXMLElement Object()似乎是完全有效的输出给我.这并不意味着xml有问题.如果要查看SimpleXMLElement对象的实际xml,请尝试print $data-> asXML().

今天关于错误:“输入的UTF-8输入不正确,表示编码!” 使用PHP的simplexml_load_stringutf8towcs里输入的不对的介绍到此结束,谢谢您的阅读,有关PHP simplexml_load_string() 函数、php simplexml_load_string() 函数把 XML 字符串载入对象中、PHP simplexml_load_string()函数实例讲解、php – Simplexml_load_string($string)返回一个空对象,但$string包含xml?代码如下等更多相关知识的信息可以在本站进行查询。

本文标签: