打算给初学者分享下微信,从头看微信文档,解析xml时,出现了一个函数:libxml_disable_entity_loader(),没见过。。。
就决定简单的了解下,可查看我转载的文章:
接着,看到libxml函数就几个,顺带简单的看看,就翻译了下(也不知道最近咋了,喜欢用我这很垃圾的英文翻译。。。):
libxml函数库:
1.简介:
PHP5.1.0开始,使用这些函数及常量,“函数参考>xml”下的这些核心扩展都依赖libxml扩展:DOM,libxml,SimpleXML,SOAP,WDDX,XSL,XML,XMLReader,XMLRPC和XMLWriter
2.预定义常量不少,不解释
3.libXMLError,是一个class,libxml可能抛出各种错误,api也查看官方文档,看来php只是简单给封装了下。
4.libxml函数
libxml_clear_errors() - 清空libxml的错误缓冲区
libxml_get_errors() - 从libxml错误缓冲区中获取错误数组(数组每个元素都是一个libXMLError错误对象)
如果libxml的错误缓冲区有任何错误,该函数返回以libXMLError错误对象为元素的一个数组,否则返回一个空数组。
libxml_get_last_error() - 返回libxml最后的错误
如果libxml的错误缓冲区有任何错误,返回最后的一个libXMLError错误对象,否则返回false
libxml_use_internal_errors([bool $use_errors = false]) - 禁用libxml错误,允许用户获取需要的错误信息
- 禁用标准的libxml错误,启用用户错误处理
- 设置为true - 启用用户错误处理
- 设置为false - 禁用用户错误处理
- 禁用用户错误处理,也会清空所有现存的libxml的错误
- 返回$use_errors之前的设定值
libxml_disable_entity_loader([bool $disable = true]) - 禁止加载外部实体
禁用/启用记载外部实体返回$disable之前的设定值
libxml_set_external_entity_loader(callable $resolver_function) - 改变默认的外部实体加载器
callable - 3个参数的回调函数。二个字符串(一个public id和一个system id),以及一个context作为第3个参数(一个有4个元素的数组)。回调函数应该返回一个资源(从打开的资源中得到一个字符串)或者null。
手册上的实例:
输出:<?php $xml = <<<XML <!DOCTYPE foo PUBLIC "-//FOO/BAR" "http://example.com/foobar"> <foo>bar</foo> XML; $dtd = <<<DTD <!ELEMENT foo (#PCDATA)> DTD; libxml_set_external_entity_loader( function ($public, $system, $context) use($dtd) { var_dump($public); var_dump($system); var_dump($context); $f = fopen("php://temp", "r+"); fwrite($f, $dtd); rewind($f); return $f; } ); $dd = new DOMDocument; $r = $dd->loadXML($xml); var_dump($dd->validate()); ?>
string(10) "-//FOO/BAR" string(25) "http://example.com/foobar" array(4) { ["directory"] => NULL ["intSubName"] => NULL ["extSubURI"] => NULL ["extSubSystem"] => NULL } bool(true)
libxml_set_streams_context(resource $streams_context) - 为下一个 libxml 文档的加载或写入,设置流环境
streams_context - 流环境资源(通过 stream_context_create() 创建)
手册上的实例:
<?php $opts = array( 'http' => array( 'user_agent' => 'PHP libxml agent', ) ); $context = stream_context_create($opts); libxml_set_streams_context($context); // request a file through HTTP $doc = DOMDocument::load('http://www.example.com/file.xml'); ?>