2012-02-09 11 views
3

ウェブサイトの出力の戻り値を確認する必要があります。有効なログインの詳細の場合、XMLファイルを返し、無効なログインの詳細がある場合は、「あなたは無効なIDを入力しました」という文字列を返します。返されたファイルがXMLであるかどうかを確認してください

私の問題は、問題は、それがチェックし、表示するメッセージを、私は

警告これらのエラーを取得していますされている

$ch = curl_init(); 

      curl_setopt($ch, CURLOPT_URL, $url); 

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

      $output = curl_exec($ch); 

      curl_close($ch); 

      if(simplexml_load_string($output)){ 
       echo 'Is XML'; 
      }else{ 
       echo 'Not XML'; 
       } 

、私がチェックするためにこのコードを使用しています:simplexml_load_string() [function.simplexml-load-string]: エンティティ:行1:パーサーエラー:開始タグが予期され、 '<'が見つからない

警告:simplexml_load_string nction.simplexml負荷文字列]:

警告:simplexml_load_string()[function.simplexml負荷文字列]:^

で は、これらのエラーを整理する方法はあります。私は過去1時間インターネットで何の成功もなしに探しています。

答えて

12

チェック最初の5つの文字が<?xmlに等しい場合

おかげで、それはかなり良い手がかりにする必要があります。戻りデータの最初の行が空白になっているので、

if(substr($output, 0, 5) == "<?xml") { 
    echo 'Is XML'; 
} else { 
    echo 'Not XML'; 
} 
+1

私はこれがもっと良いと思うでしょう。 'strpos($ output、 '<?xml')=== 0' – Yekver

+0

@Yekverは文字列全体を検索する必要がないので、技術的にsubstrは高速です。違いはおそらく無視できる。 – Mahn

+0

実際にxmlであっても.xml拡張子のファイルを受け取ったときにシンプルでとてもエレガントです... – Jiedara

9
$result = simplexml_load_string ($data, 'SimpleXmlElement', LIBXML_NOERROR+LIBXML_ERR_FATAL+LIBXML_ERR_NONE); 
if (false == $result) echo 'error'; 
+0

'if(false == $ result)'が本当にfalseなら、 'Node not longer存在する。どうすればそれを防ぐことができますか? – Daria

1

も可能でした - あなたはXMLとして文字列を解析する前に$output = trim($output)を試してみてください。

関連する問題