1

文字列を作成しました

<?xml version='1.0' encoding='ISO-8859-1'?>
<response>
  <content>Question - aa.Reply the option corresponding to  your answer(You can vote only once)</content>
  <options>
    <option url="http://localhost/poll/index.php?message=vote%3Aaar1%3Asdy&mobile=9747444565" name="sdy"/>
    <option url="http://localhost/poll/index.php?message=vote%3Aaar1%3Ab&mobile=9747444565" name="b"/>
  </options>
</response>

オプションタグのurl属性は、次のphpコードから作成されます $appUrl."/poll/index.php?message=".urlencode("vote:".$kwd.":".$oopt)."&mobile=".urlencode($_GET['mobile']);

しかし、同じものをxmlに変換すると、次のエラーが発生します。

このページには、次のエラーが含まれています。

1行目の240列目のエラー:EntityRef:';'が必要です 以下は、最初のエラーまでのページのレンダリングです。

なぜこれが起こっているのですか?それはURLエンコードの問題だと確信しています。それで、URLエンコードの正しい方法は何ですか。つまり、URLエンコードにどのような変更を適用する必要があるかを意味します。

 $appUrl."/poll/index.php?message=".urlencode("vote:".$kwd.":".$oopt)."&mobile=".urlencode($_GET['mobile']);

パラメータを取得し、それらの値は $_GET['message'] = "vote:".$kwd.":".$oopt $_GET['mobile'] = 888888errt434

4

1 に答える 1

2

URLにエンコードされていない&(アンパサンド)文字が含まれています。&は、すべてのSGMLベースのマークアップ形式の特殊文字です。

htmlspecialchars()問題を修正します:

htmlspecialchars($appUrl."/poll/index.php?message=".urlencode("vote:".$kwd.":".$oopt)."&mobile=".urlencode($_GET['mobile']));

個人的には、文字列の連結ではなく、DOMを使用してXMLドキュメントを作成することを好みます。これにより、SGML特殊文字のエンコードも正しく処理されます。私はこのようなことをします:

// Create the document
$dom = new DOMDocument('1.0', 'iso-8859-1');

// Create the root node
$rootEl = $dom->appendChild($dom->createElement('response'));

// Create content node
$content = 'Question - aa.Reply the option corresponding to your answer (You can vote only once)';
$rootEl->appendChild($dom->createElement('content', $content));

// Create options container
$optsEl = $rootEl->appendChild($dom->createElement('options'));

// Add the options - data from wherever you currently get it from, this array is
// just meant as an example of the mechanism
$options = array(
  'sdy' => 'http://localhost/poll/index.php?message=vote%3Aaar1%3Asdy&mobile=9747444565',
  'b' => 'http://localhost/poll/index.php?message=vote%3Aaar1%3Ab&mobile=9747444565'
);
foreach ($options as $name => $url) {
  $optEl = $optsEl->appendChild($dom->createElement('option'));
  $optEl->setAttribute('name', $name);
  $optEl->setAttribute('url', $url);
}

// Save document to a string (you could use the save() method to write it
// to a file instead)
$xml = $dom->saveXML();

実例

于 2012-09-17T14:29:33.630 に答える