我有一个函数(在类数据库中)
function locTo (){//return the location of the to currency
$con = dbconnect(); //instantiate db connection
$locationTo= mysql_query ("SELECT location FROM Sheet1 where currency_code = '$this->to'", $con);
$lol = mysql_fetch_array($locationTo);
return $lol['location'];
mysql_close();
}
当我调用函数
时$foo = new Database($from,$to);
$hey = $foo->LocTo();
echo $hey;
或
$foo = new Database($from,$to);
echo $foo->LocTo();
它输出正确。
我试图加入XML并且我得到一个编码错误。
这是我的XML
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<conv>';
echo'<at>'.$timefrom.'</at>';
echo'<rate>'.$rate.'</rate>';
echo'<from>';
echo'<code>'.$from.'</code>';
echo'<curr>'.$currencyFrom.'</curr>';
echo'<loc>'.$locFrom.'</loc>';
echo'<amnt>'.$amount.'</amnt>';
echo'</from>';
echo'<to>';
echo'<code>'.$to.'</code>';
echo'<curr>'.$currencyTo.'</curr>';
echo'<loc>'.$locTo.'</loc>';
echo'<amnt>'.$convertedAmount.'</amnt>';
echo'</to>';
echo'</conv>';
有谁知道为什么我会收到编码错误?我检查了源代码,它到达了位置。
这是一个放置位置的示例。
AED兑换英镑
United Arab Emirates
United Kingdom, Crown Dependencies (the Isle of Man and the Channel Islands), certain British Overseas Territories ( South Georgia and the South Sandwich Islands, British Antarctic Territory and British Indian Ocean Territory)
答案 0 :(得分:2)
htmlspecialchars()很可能是你的朋友,如
echo '<loc>' . htmlspecialchars($locFrom) . '</loc>';
此外,正如ZiTAL所述,header('Content-Type: text/xml, charset=utf-8')
在任何输出之前是必须的。
答案 1 :(得分:2)
我建议切换到(例如)DOM,以便您的代码如下所示:
<?php
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true; // Just for presentation, don't use this in real app
$main = $dom->createElement( 'conv');
$dom->appendChild( $main);
// Generic attributes
$main->appendChild( $dom->createElement( 'at', $timefrom));
$main->appendChild( $dom->createElement( 'rate', $rate));
// Fill form
$from = $dom->createElement( 'from');
$from->appendChild( $dom->createElement( 'code', $row['from']));
$from->appendChild( $dom->createElement( 'curr', $currencyFrom));
$from->appendChild( $dom->createElement( 'loc', 'time'));
$from->appendChild( $dom->createElement( 'amnt', 'time'));
$main->appendChild( $from);
// Fill to
$to = $dom->createElement( 'to');
$to->appendChild( $dom->createElement( 'at', 'time'));
$to->appendChild( $dom->createElement( 'code', 'time'));
$to->appendChild( $dom->createElement( 'curr', 'time'));
$to->appendChild( $dom->createElement( 'loc', 'time'));
$to->appendChild( $dom->createElement( 'amnt', '<img />'));
$main->appendChild( $to);
echo $dom->saveXML();
这应该使您的XML始终有效。结果看起来像(只填充字符串'time'
):
<?xml version="1.0" encoding="UTF-8"?>
<conv>
<at>time</at>
<rate>time</rate>
<from>
<code>time</code>
<curr>time</curr>
<loc>time</loc>
<amnt>time</amnt>
</from>
<to>
<at>time</at>
<code>time</code>
<curr>time</curr>
<loc>time</loc>
<amnt><img /></amnt>
</to>
</conv>
看看最后<amnt />
它是否正确“xml转义”,你不必再担心了,但使用DOMELement->noveValue = html
AFAIK时要小心,这不会逃避你的价值观。
当然不要忘记设置正确的header()
,使用(在发送任何输出之前):
header('Content-Type: text/xml, charset=utf-8');