0

このコードを使用して XML のコンテンツを取得しています。

$xml = simplexml_load_file("X.xml");
echo $xml->CountryList->Country[1];

X.xml は次のとおりです。

<PickUpCityListRQ>
  <CountryList>
    <Country>Albania</Country>
    <Country>Andorra</Country>
  </CountryList>
</PickUpCityListRQ>

すべて正常に動作し、Andorra が返されますが、次のような特殊文字を含む URL を使用しようとすると、次のようになります。

http://somelink/ServiceRequest.do?xml=<PickUpCityListRQ><Credentials username='USERNAME' password='PASSWORD' remoteIp='IP'/><Country>UK</Country></PickUpCityListRQ>

このリンクは単なる例であるため機能しませんが、実際のリンクは X.xml と同じコンテンツを返すと信じています。その理由がリンクの特殊文字であることは知っていますが、うまくいきません。私はこのようなことを試しました:

$username = "USERNAME";
$password = "PASSWORD";
$accessurl = htmlspecialchars("Credentials username='$username' password='$password' remoteIp='123.123.123.123'/");
$required = htmlspecialchars("<PickUpCityListRQ><$accessurl><Country>UK</Country></PickUpCityListRQ>");
$url = 'somelink/service/ServiceRequest.do?xml='.$required;
echo $url;

必要なリンクを (echo で) 返します。手動で (ブラウザーで) 使用すると、必要なコンテンツにアクセスできます。しかし、次のコードを使用して XML コンテンツを取得しようとすると、次のようになります。

$xml = simplexml_load_file($url);
echo $xml->CountryList->Country[1];

私は働きません。何か案は?前もって感謝します。

4

2 に答える 2

2

htmlspecialcharsHTMLコンテンツページ内の特別な文字を保護するために使用されます(特にユーザー入力で、ある種のXSSまたはその他の攻撃を回避するため..)。

URL を操作する場合は、代わりurlencodeに を使用してコンテンツを URL のパラメーターとして送信する必要があります。

したがって、URL は次のようになります。

http://someserver/somethink/services/ServiceRequest.do?xml=%3CPickUpCityListRQ%3E%3CCredentials%20username%3D'USERNAME'%20password%3D'PASS‌​WORD'%20remoteIp%3D'IP'%2F%3E%3CCountry%3EUK%3C%2FCountry%3E%3C%2FPickUpCityListR‌​Q%3E

ドキュメントにあるようにurldecode、スーパーグローバル $_GET と $_REQUEST は既に URL デコードされているため、必須ではありません。したがって、ジョブを実行するスクリプトでは、 $_GET エントリの値を直接使用できます。

$xml = simplexml_load_string($_GET['xml']);

ドキュメンテーション: urlencode

于 2013-03-20T05:00:13.500 に答える
0

URLに特別な文字を含むPHPsimplexml_load_fileから盗まれた回答

これを使って

$username = "USERNAME";
$password = "PASSWORD";
$accessurl = "Credentials username='$username' password='$password' remoteIp='123.123.123.123'/";
$required = "<PickUpCityListRQ><$accessurl><Country>UK</Country></PickUpCityListRQ>";

$url= rawurlencode("somelink/service/ServiceRequest.do?xml={$required}");

$xml = simplexml_load_file($url);
echo $xml->CountryList->Country[1];
于 2013-03-20T05:03:03.960 に答える