Использование одной «умной цитаты» в моих данных JSON нарушает PHP-скрипт - PullRequest
0 голосов
/ 02 июля 2010

У меня есть PHP-скрипт, который читает некоторые данные JSON, предоставленные клиентом.Предоставленные данные JSON содержали одну «умную цитату».

Пример:

{
    "title"         : "Lorem Ipsum’s Dolar" 
}

В моем скрипте я использую небольшую функцию для получения данных json:

public function getJson($url) {
    $filePath = $url;
    $fh = fopen($filePath, 'r') or die();
    $temp = fread($fh, filesize($filePath));
    $temp = utf8_encode($temp);
    echo $temp . "<br />";
    $json = json_decode($temp);
    fclose($fh);
    return $json;
}

Если я utf8 кодирую данные, когда я их выводю, я ничего не вижу там, где должна быть цитата.Если я не кодирую данные utf8, когда я их отображаю, я вижу забавный символ вопросительного знака 100

Есть мысли о том, как на самом деле увидеть нужный символ ??1013 *

Ответы [ 3 ]

1 голос
/ 02 июля 2010

Возможно ли, что сервер отправляет данные json в кодировке, подобной windows-1252?Эта кодовая страница содержит несколько интеллектуальных кодовых символов, где iso-8859 имеет управляющие символы.Не могли бы вы попробовать использовать iconv("windows-1252", "utf-8", $temp) вместо utf8_encode.Еще лучше было бы, если бы сервер уже отправлял json в кодировке utf-8, так как это рекомендуемая кодировка для rfc4627.

0 голосов
/ 02 июля 2010

Можете ли вы заменить строку, предполагая, что все данные - utf8?

$text = str_replace($find, $replace, $text);

Ищете символы ниже?

 '“'  // left side double smart quote
 'â€'  // right side double smart quote
 '‘'  // left side single smart quote
 '’'  // right side single smart quote
 '…'  // elipsis
 '—'  // em dash
 '–'  // en dash
0 голосов
/ 02 июля 2010

Проблема еще в стороне, которая генерирует файл JSON.Там вы должны экранировать 'by \'

Если вы не можете изменить эту часть, вы должны сделать это следующим образом:

...