У меня есть 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, когда я повторяю это, я вижу забавный символ знака вопроса
Любые мысли о том, как на самом деле увидеть правильный характер?
Благодаря!
Возможно ли, что сервер отправляет json-данные в кодировку, такую как windows-1252? У этой кодовой страницы есть некоторые символы умного кода, где iso-8859 имеет контрольные символы. Не могли бы вы попытаться использовать iconv("windows-1252", "utf-8", $temp)
вместо utf8_encode
. Еще лучше было бы, если сервер уже отправил кодировку utf-8 json, так как это рекомендуемая кодировка для rfc4627.
Проблема больше на стороне, которая создает файл JSON. Там вы должны убежать от 'by \'
Если вы не можете изменить эту часть, вы должны сделать это с помощью addlashes:
$temp = fread($fh, filesize($filePath)); $temp = utf8_encode($temp); echo $temp . "<br />"; $temp = addslashes($temp); $json = json_decode($temp);
Можете ли вы, возможно, заменить строку, считая данные 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