php - monedas - char devuelto por la API de divisas de Google
conversor de monedas en php (3)
Intenta modificar tu código para que puedas decodificar UTF8 de los datos que devuelve Google:
// Check URL has been formed
if ($conversion == false) {
echo ''Sorry, something went wrong'';
} else {
echo utf8_decode($conversion[0]), '' = '', utf8_decode($conversion[1]);
}
Supongo que su codificación predeterminada es ISO-8859-1
EDITAR
(Según los comentarios) El problema puede ser que le han enviado un carácter nulo. Prueba esto:
$result = str_replace("/0", "", $result );
o
$result = str_replace("�", "", $result );
Fondo:
Creé un sitio web que muestra las tasas de cambio de varios países. Utilizo la API del conversor de divisas de Google para realizar los cálculos.
http://www.google.com/ig/calculator?h1=en&q=9999gbp=?usd
Observe la consulta que he pasado en, por ejemplo, 9999 Great British Pounds
a United States Dollars
.
La API regresa:
{lhs: "9999 British pounds",rhs: "15 769.4229 US dollars",error: "",icc: true}
Google ha separado el 15 769.4229
con espacios en blanco entre el 5
y el 7
.
Esto causa un problema cuando devuelvo los resultados de un cálculo en mi sitio ya que el espacio en blanco se reemplaza con el símbolo .
Vea la captura de pantalla a continuación:
¿Alguna idea de cómo se llama este símbolo para intentar quitarlo?
<?php
// Check to ensure that form has been submitted
if (isset($_POST[''amount''], $_POST[''from''], $_POST[''to''])) {
$amount = trim($_POST[''amount'']);
$from = $_POST[''from''];
$to = $_POST[''to''];
try {
$conversion = currency_convert($googleCurrencyApi, $amount, $from, $to);
} catch (Exception $e) {
echo ''Caught exception: '', $e->getMessage();
}
// Check URL has been formed
if ($conversion == false) {
echo ''Sorry, something went wrong'';
} else {
echo $conversion[0], '' = '', $conversion[1];
}
}
function currency_convert($googleCurrencyApi, $amount, $from, $to) {
$result = file_get_contents($googleCurrencyApi . $amount . $from . ''=?'' . $to);
$expl = explode(''"'', $result);
if ($expl[1] == '''' || $expl[3] == '''') {
throw new Exception(''An error has occured. Unable to get file contents'');
} else {
return array(
$expl[1],
$expl[3]
);
}
}
?>
Aquí está mi código hasta el momento, así que entiendes la idea detrás de mi lógica.
Probablemente esto sea un espacio sin interrupciones, intente reemplazarlo en el espacio:
$result = file_get_contents($googleCurrencyApi . $amount . $from . ''=?'' . $to);
$result = str_replace("/xA0", " ", $result);
Después de str_replace
do:
$result_amt = utf8_decode($amount);
Obtendrás el ?
personaje en lugar de espacio. Entonces, ¿usar str_replace
nuevamente para eliminar ?
personaje:
$result =str_replace("?","", $result_amt );