� символ возвращается из API валют Google - PullRequest
6 голосов
/ 11 февраля 2012

Справочная информация:

Я создал веб-сайт, который отображает курсы валют разных стран.Я использую Google конвертер валют API для выполнения расчетов.

http://www.google.com/ig/calculator?h1=en&q=9999gbp=?usd

Обратите внимание на запрос, который я прошел, например, 9999 Great British Pounds на United States Dollars.

API возвращает:

{lhs: "9999 British pounds",rhs: "15 769.4229 U.S. dollars",error: "",icc: true}

Google разделил 15 769.4229 пробелом между 5 и 7.

Это вызывает проблему, когда я возвращаю результаты вычислений на моемsite как символ пробела заменяется символом �.

См. Снимок экрана ниже:

enter image description here

Есть идеи, как называется этот символ, чтобы я мог попытаться удалить его?

<?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]
        );
    }
}
?>

Вот мой код на данный момент, так что вы понимаете мою логику.

Ответы [ 3 ]

3 голосов
/ 11 февраля 2012

Скорее всего, это неразрывный пробел, попробуйте заменить на пробел:

$result = file_get_contents($googleCurrencyApi . $amount . $from . '=?' . $to);
$result = str_replace("\xA0", " ", $result);
1 голос
/ 11 февраля 2012

Попробуйте изменить код так, чтобы вы в кодировке UTF8 декодировали данные, возвращаемые из Google:

// Check URL has been formed 
    if ($conversion == false) {
        echo 'Sorry, something went wrong';
    } else {
        echo utf8_decode($conversion[0]), ' = ', utf8_decode($conversion[1]);
    }

Я предполагаю, что ваша кодировка по умолчанию - ISO-8859-1

EDIT

(Согласно комментариям) Возможно, проблема в том, что вам прислали нулевой символ. Попробуйте это:

$result = str_replace("\0", "", $result );

или

$result = str_replace("&#x0;", "", $result );
0 голосов
/ 07 января 2013

После str_replace do:

$result_amt = utf8_decode($amount);

Вы получите символ ? вместо пробела.Затем снова используйте str_replace, чтобы удалить ? символ:

$result =str_replace("?","", $result_amt );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...