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: Expecting ';' 下面是第一个错误之前的页面渲染。

为什么会发生这种情况。我确定这是 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 回答