str_replace 在 PHP 中似乎不起作用
str_replace in PHP does not seem to work
我正在尝试从我们的中央银行获取一些数据,但无法计算出来。 (当然,他们不提供支持...)
$client = new SoapClient("http://www.mnb.hu/arfolyamok.asmx?wsdl",array('trace' => 1));
$xml = new SimpleXMLElement($client->GetCurrentExchangeRates()->GetCurrentExchangeRatesResult);
echo $client->GetCurrentExchangeRates()->GetCurrentExchangeRatesResult;
echo (string)htmlentities($client->__getLastResponse());
我得到的结果是:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetCurrentExchangeRatesResponse xmlns="http://www.mnb.hu/webservices/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<GetCurrentExchangeRatesResult>
<MNBCurrentExchangeRates>
<Day date="2017-05-25">
<Rate unit="1" curr="AUD">204,7</Rate>
<Rate unit="1" curr="BGN">157,51</Rate>
<Rate unit="1" curr="BRL">83,66</Rate>
<Rate unit="1" curr="CAD">204,06</Rate>
<Rate unit="1" curr="CHF">282,21</Rate>
<Rate unit="1" curr="CNY">39,89</Rate>
<Rate unit="1" curr="CZK">11,65</Rate>
<Rate unit="1" curr="DKK">41,4</Rate>
<Rate unit="1" curr="EUR">308,06</Rate>
<Rate unit="1" curr="GBP">355,61</Rate>
<Rate unit="1" curr="HKD">35,17</Rate>
<Rate unit="1" curr="HRK">41,48</Rate>
<Rate unit="100" curr="IDR">2,06</Rate>
<Rate unit="1" curr="ILS">76,56</Rate>
<Rate unit="1" curr="INR">4,24</Rate>
<Rate unit="1" curr="ISK">2,73</Rate>
<Rate unit="100" curr="JPY">245,13</Rate>
<Rate unit="100" curr="KRW">24,49</Rate>
<Rate unit="1" curr="MXN">14,89</Rate>
<Rate unit="1" curr="MYR">64,07</Rate>
<Rate unit="1" curr="NOK">32,92</Rate>
<Rate unit="1" curr="NZD">192,59</Rate>
<Rate unit="1" curr="PHP">5,5</Rate>
<Rate unit="1" curr="PLN">73,67</Rate>
<Rate unit="1" curr="RON">67,7</Rate>
<Rate unit="1" curr="RSD">2,51</Rate>
<Rate unit="1" curr="RUB">4,88</Rate>
<Rate unit="1" curr="SEK">31,68</Rate>
<Rate unit="1" curr="SGD">197,91</Rate>
<Rate unit="1" curr="THB">8,01</Rate>
<Rate unit="1" curr="TRY">76,91</Rate>
<Rate unit="1" curr="UAH">10,43</Rate>
<Rate unit="1" curr="USD">274,03</Rate>
<Rate unit="1" curr="ZAR">21,23</Rate>
</Day>
</MNBCurrentExchangeRates>
</GetCurrentExchangeRatesResult>
</GetCurrentExchangeRatesResponse>
这不是很好处理。所以我用了:
$res = (string)htmlentities($client->__getLastResponse());
$res = str_replace("<", "<", $res);
$res = str_replace(">", ">", $res);
echo $res;
由于某种原因,结果是:
<MNBCurrentExchangeRates>
<Day date="2017-05-25">
<Rate unit="1" curr="AUD">204,7</Rate>
<Rate unit="1" curr="BGN">157,51</Rate>
<Rate unit="1" curr="BRL">83,66</Rate>
<Rate unit="1" curr="CAD">204,06</Rate>
<Rate unit="1" curr="CHF">282,21</Rate>
<Rate unit="1" curr="CNY">39,89</Rate>
<Rate unit="1" curr="CZK">11,65</Rate>
<Rate unit="1" curr="DKK">41,4</Rate>
<Rate unit="1" curr="EUR">308,06</Rate>
<Rate unit="1" curr="GBP">355,61</Rate>
<Rate unit="1" curr="HKD">35,17</Rate>
<Rate unit="1" curr="HRK">41,48</Rate>
<Rate unit="100" curr="IDR">2,06</Rate>
<Rate unit="1" curr="ILS">76,56</Rate>
<Rate unit="1" curr="INR">4,24</Rate>
<Rate unit="1" curr="ISK">2,73</Rate>
<Rate unit="100" curr="JPY">245,13</Rate>
<Rate unit="100" curr="KRW">24,49</Rate>
<Rate unit="1" curr="MXN">14,89</Rate>
<Rate unit="1" curr="MYR">64,07</Rate>
<Rate unit="1" curr="NOK">32,92</Rate>
<Rate unit="1" curr="NZD">192,59</Rate>
<Rate unit="1" curr="PHP">5,5</Rate>
<Rate unit="1" curr="PLN">73,67</Rate>
<Rate unit="1" curr="RON">67,7</Rate>
<Rate unit="1" curr="RSD">2,51</Rate>
<Rate unit="1" curr="RUB">4,88</Rate>
<Rate unit="1" curr="SEK">31,68</Rate>
<Rate unit="1" curr="SGD">197,91</Rate>
<Rate unit="1" curr="THB">8,01</Rate>
<Rate unit="1" curr="TRY">76,91</Rate>
<Rate unit="1" curr="UAH">10,43</Rate>
<Rate unit="1" curr="USD">274,03</Rate>
<Rate unit="1" curr="ZAR">21,23</Rate>
</Day>
</MNBCurrentExchangeRates>
这不仅仅是奇怪。我想清除这些 lt 和 gt 代码,但却丢失了输出中的 <> 部分。我想用 simplexml 获取数据,但无论我给它哪个输出,它都会返回 false。这是我想使用的代码,但现在它只给出错误消息,因为 $xml 的竞争是 "false";
$xml = simplexml_load_string( (string)$res );
var_dump($xml);
foreach($xml->xpath('//Day') as $header) {
echo (string)$header->Rate;
}
(它实际上在一行中给出了结果 XML,我只是整理了一下。)
<?php
ini_set('display_errors', 1);
$string = <<<HTML
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetCurrentExchangeRatesResponse xmlns="http://www.mnb.hu/webservices/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<GetCurrentExchangeRatesResult>
<MNBCurrentExchangeRates>
<Day date="2017-05-25">
<Rate unit="1" curr="AUD">204,7</Rate>
<Rate unit="1" curr="BGN">157,51</Rate>
<Rate unit="1" curr="BRL">83,66</Rate>
<Rate unit="1" curr="CAD">204,06</Rate>
<Rate unit="1" curr="CHF">282,21</Rate>
<Rate unit="1" curr="CNY">39,89</Rate>
<Rate unit="1" curr="CZK">11,65</Rate>
<Rate unit="1" curr="DKK">41,4</Rate>
<Rate unit="1" curr="EUR">308,06</Rate>
<Rate unit="1" curr="GBP">355,61</Rate>
<Rate unit="1" curr="HKD">35,17</Rate>
<Rate unit="1" curr="HRK">41,48</Rate>
<Rate unit="100" curr="IDR">2,06</Rate>
<Rate unit="1" curr="ILS">76,56</Rate>
<Rate unit="1" curr="INR">4,24</Rate>
<Rate unit="1" curr="ISK">2,73</Rate>
<Rate unit="100" curr="JPY">245,13</Rate>
<Rate unit="100" curr="KRW">24,49</Rate>
<Rate unit="1" curr="MXN">14,89</Rate>
<Rate unit="1" curr="MYR">64,07</Rate>
<Rate unit="1" curr="NOK">32,92</Rate>
<Rate unit="1" curr="NZD">192,59</Rate>
<Rate unit="1" curr="PHP">5,5</Rate>
<Rate unit="1" curr="PLN">73,67</Rate>
<Rate unit="1" curr="RON">67,7</Rate>
<Rate unit="1" curr="RSD">2,51</Rate>
<Rate unit="1" curr="RUB">4,88</Rate>
<Rate unit="1" curr="SEK">31,68</Rate>
<Rate unit="1" curr="SGD">197,91</Rate>
<Rate unit="1" curr="THB">8,01</Rate>
<Rate unit="1" curr="TRY">76,91</Rate>
<Rate unit="1" curr="UAH">10,43</Rate>
<Rate unit="1" curr="USD">274,03</Rate>
<Rate unit="1" curr="ZAR">21,23</Rate>
</Day>
</MNBCurrentExchangeRates>
</GetCurrentExchangeRatesResult>
</GetCurrentExchangeRatesResponse>
</s:Body>
</s:Envelope>
HTML;
$xml= html_entity_decode($string);
$domDocument = new DOMDocument();
$domDocument->loadXML($xml);
$results=$domDocument->getElementsByTagName("Day");
foreach($results->item(0)->childNodes as $node)
{
if($node instanceof DOMElement)
{
echo $node->nodeValue;
}
}
我正在尝试从我们的中央银行获取一些数据,但无法计算出来。 (当然,他们不提供支持...)
$client = new SoapClient("http://www.mnb.hu/arfolyamok.asmx?wsdl",array('trace' => 1));
$xml = new SimpleXMLElement($client->GetCurrentExchangeRates()->GetCurrentExchangeRatesResult);
echo $client->GetCurrentExchangeRates()->GetCurrentExchangeRatesResult;
echo (string)htmlentities($client->__getLastResponse());
我得到的结果是:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetCurrentExchangeRatesResponse xmlns="http://www.mnb.hu/webservices/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<GetCurrentExchangeRatesResult>
<MNBCurrentExchangeRates>
<Day date="2017-05-25">
<Rate unit="1" curr="AUD">204,7</Rate>
<Rate unit="1" curr="BGN">157,51</Rate>
<Rate unit="1" curr="BRL">83,66</Rate>
<Rate unit="1" curr="CAD">204,06</Rate>
<Rate unit="1" curr="CHF">282,21</Rate>
<Rate unit="1" curr="CNY">39,89</Rate>
<Rate unit="1" curr="CZK">11,65</Rate>
<Rate unit="1" curr="DKK">41,4</Rate>
<Rate unit="1" curr="EUR">308,06</Rate>
<Rate unit="1" curr="GBP">355,61</Rate>
<Rate unit="1" curr="HKD">35,17</Rate>
<Rate unit="1" curr="HRK">41,48</Rate>
<Rate unit="100" curr="IDR">2,06</Rate>
<Rate unit="1" curr="ILS">76,56</Rate>
<Rate unit="1" curr="INR">4,24</Rate>
<Rate unit="1" curr="ISK">2,73</Rate>
<Rate unit="100" curr="JPY">245,13</Rate>
<Rate unit="100" curr="KRW">24,49</Rate>
<Rate unit="1" curr="MXN">14,89</Rate>
<Rate unit="1" curr="MYR">64,07</Rate>
<Rate unit="1" curr="NOK">32,92</Rate>
<Rate unit="1" curr="NZD">192,59</Rate>
<Rate unit="1" curr="PHP">5,5</Rate>
<Rate unit="1" curr="PLN">73,67</Rate>
<Rate unit="1" curr="RON">67,7</Rate>
<Rate unit="1" curr="RSD">2,51</Rate>
<Rate unit="1" curr="RUB">4,88</Rate>
<Rate unit="1" curr="SEK">31,68</Rate>
<Rate unit="1" curr="SGD">197,91</Rate>
<Rate unit="1" curr="THB">8,01</Rate>
<Rate unit="1" curr="TRY">76,91</Rate>
<Rate unit="1" curr="UAH">10,43</Rate>
<Rate unit="1" curr="USD">274,03</Rate>
<Rate unit="1" curr="ZAR">21,23</Rate>
</Day>
</MNBCurrentExchangeRates>
</GetCurrentExchangeRatesResult>
</GetCurrentExchangeRatesResponse>
这不是很好处理。所以我用了:
$res = (string)htmlentities($client->__getLastResponse());
$res = str_replace("<", "<", $res);
$res = str_replace(">", ">", $res);
echo $res;
由于某种原因,结果是:
<MNBCurrentExchangeRates>
<Day date="2017-05-25">
<Rate unit="1" curr="AUD">204,7</Rate>
<Rate unit="1" curr="BGN">157,51</Rate>
<Rate unit="1" curr="BRL">83,66</Rate>
<Rate unit="1" curr="CAD">204,06</Rate>
<Rate unit="1" curr="CHF">282,21</Rate>
<Rate unit="1" curr="CNY">39,89</Rate>
<Rate unit="1" curr="CZK">11,65</Rate>
<Rate unit="1" curr="DKK">41,4</Rate>
<Rate unit="1" curr="EUR">308,06</Rate>
<Rate unit="1" curr="GBP">355,61</Rate>
<Rate unit="1" curr="HKD">35,17</Rate>
<Rate unit="1" curr="HRK">41,48</Rate>
<Rate unit="100" curr="IDR">2,06</Rate>
<Rate unit="1" curr="ILS">76,56</Rate>
<Rate unit="1" curr="INR">4,24</Rate>
<Rate unit="1" curr="ISK">2,73</Rate>
<Rate unit="100" curr="JPY">245,13</Rate>
<Rate unit="100" curr="KRW">24,49</Rate>
<Rate unit="1" curr="MXN">14,89</Rate>
<Rate unit="1" curr="MYR">64,07</Rate>
<Rate unit="1" curr="NOK">32,92</Rate>
<Rate unit="1" curr="NZD">192,59</Rate>
<Rate unit="1" curr="PHP">5,5</Rate>
<Rate unit="1" curr="PLN">73,67</Rate>
<Rate unit="1" curr="RON">67,7</Rate>
<Rate unit="1" curr="RSD">2,51</Rate>
<Rate unit="1" curr="RUB">4,88</Rate>
<Rate unit="1" curr="SEK">31,68</Rate>
<Rate unit="1" curr="SGD">197,91</Rate>
<Rate unit="1" curr="THB">8,01</Rate>
<Rate unit="1" curr="TRY">76,91</Rate>
<Rate unit="1" curr="UAH">10,43</Rate>
<Rate unit="1" curr="USD">274,03</Rate>
<Rate unit="1" curr="ZAR">21,23</Rate>
</Day>
</MNBCurrentExchangeRates>
这不仅仅是奇怪。我想清除这些 lt 和 gt 代码,但却丢失了输出中的 <> 部分。我想用 simplexml 获取数据,但无论我给它哪个输出,它都会返回 false。这是我想使用的代码,但现在它只给出错误消息,因为 $xml 的竞争是 "false";
$xml = simplexml_load_string( (string)$res );
var_dump($xml);
foreach($xml->xpath('//Day') as $header) {
echo (string)$header->Rate;
}
(它实际上在一行中给出了结果 XML,我只是整理了一下。)
<?php
ini_set('display_errors', 1);
$string = <<<HTML
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetCurrentExchangeRatesResponse xmlns="http://www.mnb.hu/webservices/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<GetCurrentExchangeRatesResult>
<MNBCurrentExchangeRates>
<Day date="2017-05-25">
<Rate unit="1" curr="AUD">204,7</Rate>
<Rate unit="1" curr="BGN">157,51</Rate>
<Rate unit="1" curr="BRL">83,66</Rate>
<Rate unit="1" curr="CAD">204,06</Rate>
<Rate unit="1" curr="CHF">282,21</Rate>
<Rate unit="1" curr="CNY">39,89</Rate>
<Rate unit="1" curr="CZK">11,65</Rate>
<Rate unit="1" curr="DKK">41,4</Rate>
<Rate unit="1" curr="EUR">308,06</Rate>
<Rate unit="1" curr="GBP">355,61</Rate>
<Rate unit="1" curr="HKD">35,17</Rate>
<Rate unit="1" curr="HRK">41,48</Rate>
<Rate unit="100" curr="IDR">2,06</Rate>
<Rate unit="1" curr="ILS">76,56</Rate>
<Rate unit="1" curr="INR">4,24</Rate>
<Rate unit="1" curr="ISK">2,73</Rate>
<Rate unit="100" curr="JPY">245,13</Rate>
<Rate unit="100" curr="KRW">24,49</Rate>
<Rate unit="1" curr="MXN">14,89</Rate>
<Rate unit="1" curr="MYR">64,07</Rate>
<Rate unit="1" curr="NOK">32,92</Rate>
<Rate unit="1" curr="NZD">192,59</Rate>
<Rate unit="1" curr="PHP">5,5</Rate>
<Rate unit="1" curr="PLN">73,67</Rate>
<Rate unit="1" curr="RON">67,7</Rate>
<Rate unit="1" curr="RSD">2,51</Rate>
<Rate unit="1" curr="RUB">4,88</Rate>
<Rate unit="1" curr="SEK">31,68</Rate>
<Rate unit="1" curr="SGD">197,91</Rate>
<Rate unit="1" curr="THB">8,01</Rate>
<Rate unit="1" curr="TRY">76,91</Rate>
<Rate unit="1" curr="UAH">10,43</Rate>
<Rate unit="1" curr="USD">274,03</Rate>
<Rate unit="1" curr="ZAR">21,23</Rate>
</Day>
</MNBCurrentExchangeRates>
</GetCurrentExchangeRatesResult>
</GetCurrentExchangeRatesResponse>
</s:Body>
</s:Envelope>
HTML;
$xml= html_entity_decode($string);
$domDocument = new DOMDocument();
$domDocument->loadXML($xml);
$results=$domDocument->getElementsByTagName("Day");
foreach($results->item(0)->childNodes as $node)
{
if($node instanceof DOMElement)
{
echo $node->nodeValue;
}
}