2013-05-30 30 views
-1

我正在嘗試POST SOAP請求。 它看起來像一個重複的問題。有多種解決方案可用於此問題,但沒有爲我工作。 所以我曾嘗試以下操作:
CodeIgniter:禁止密鑰字符<?xml_version

Found在SO頂部的答案,但它給了我preg_match() compilation failure。我試圖用answer來解決這個問題,但我仍然遇到同樣的錯誤。

然後我嘗試了最後回答this從SO的問題,但沒有運氣。

核心/ Input.php

function _clean_input_keys($str) 
    { 
     if (! preg_match("/[^a-zA-Z0-9_\-.]+$/i", $str)) 
     { 
      exit('Disallowed Key Characters.'.$str); 
     } 

我在正則表達式不好的,想不通其中的問題?

+0

發佈您嘗試的代碼,很明顯,您編寫的正則表達式錯誤,因此無法正確編譯。我們無法猜測您嘗試的是什麼正則表達式。 –

+0

真的,爲什麼你需要'<?xml_version'作爲輸入***鍵***? –

+0

@WesleyMurch我正在嘗試發送SOAP服務請求。 –

回答

1

你能先告訴你你想做什麼?你通過郵件發送XML,得到?這個錯誤是怎麼發生的?

Also in solution that you have found(這可能是原因)您在應用程序中使用的正則表達式是什麼?

您是否注意到了這種情況? preg_macth編譯錯誤表示轉義正則表達式

請不說,這就是焦缺少的是。(點),你應該始終 逃避正則表達式。(點),因爲它們會以其他方式 允許任何單個字符。

編輯:

if (!preg_match("/^[a-z0-9:_\/-\<\?]+$/i", $str)) //or alternatively match all chars "/^[\.-a-z0-9:_\/-]+$/i" 
    { 
     exit('Disallowed Key Characters.'.$str); 
    } 

不添加<而且,你必須添加,且觸發這個條件的所有包機?這些租船人未加入的原因是爲了防止注入。所以明智地使用它。谷歌xml preg_match expression確保它是一個XML文件,如果需要創建另一個輸入檢查。因爲xml可能包含所有不允許使用的字符,所以您可能會刪除該條件並返回true;

Edit2:同樣,如果你可以代替帖子,嘗試通過鏈接或上傳的文件解析XML。

+0

是的。這個答案對我不起作用,並給了我一個錯誤。我在我的問題中提到過。試圖用' - '來解決它,但仍然是同樣的問題。 –

+0

@HimanshuYadav看我的編輯 –

+0

不能這樣做。 XML請求正在從Windows 8應用程序發送。這是一個Windows 8標準。 –