2012-09-19 24 views
2

我正在使用codeigniter实现REST服务器,它包含一个函数,其中将发布一些XML以检索某些数据。Codeigniter - 在RESTful服务器中发送XML时不允许的密钥字符

XML是通过请求体传递,并与检索:

$xml = file_get_contents('php://input'); 

的XML,然后验证此:

try 
{ 
    $doc = new DOMDocument(); 
    $doc->preserveWhiteSpace = FALSE; 
    $doc->loadXML($xml); 
    if ($doc->schemaValidate(APPPATH.'views/xml/xmlvalidate.xsd')) { 
     //--this is valid 
    } 
} 

也能正常工作与RESTClient实现在Firefox,但当我使用高级REST客户端在铬我得到“不允许的关键字符”错误,违规字符串,根据codeigniter,是:

<?xml version 

任何人都有任何想法,为什么它只适用于firefox RESTclient?如果在测试结束后可能会出现错误,我需要找出问题的原因。

+0

那么有人找出如何解决这个问题吗? – HGPB

回答

1

通常,CI错误来自外语字符(即使在POST数据中)或关闭php括号后的换行符。

可以适应在CI配置您允许的字符(的application/config/config.php文件):为空字符串$config['permitted_uri_chars'] = 'a-z 0-9~%.:_=+-<>';

或测试:

变化:$config['permitted_uri_chars'] = 'a-z 0-9~%.:_=+-';

$config['permitted_uri_chars'] = ''; // anything goes

注意将CI的自然网址用于控制器映射而没有过滤输入时的安全分歧。

+0

尝试了两个建议,但给出了相同的结果。这个问题不是源于设置,而是来自更深的函数,其中CI清除所有请求数据中的所有变量(即函数_clean_input_keys,从函数_clean_input_data调用,函数_clean_input_data从$ _POST = $ this - > _ clean_input_data($ _ POST)调用;在Input.php中的_sanitize_globals()函数中 问题是,首先我不明白XML与键有什么关系,因为它是主体的一部分,应该肯定是数组的值?其次,为什么 –

+1

甚至$ config ['permitted_uri_chars'] ='';没有工作吗? – Mirko

+1

是的,尝试了所有3,都没有工作。问题的来源是在输入.php文件,其中函数_clean_input_keys尝试将XML放入$ _POST键(为什么?)。 –

相关问题