2016-03-15 4 views
4

Рассмотрим следующий URL: click herePHP локон японский выход искажен

Существует некоторая кодировка в японских символов. Браузер Firefox на моем ПК способен автоматически обнаруживать его и показывать символы. Для Chrome, с другой стороны, я должен вручную изменить кодировку на «Shift_JIS», чтобы увидеть японские символы.

Если я пытаюсь получить доступ к контенту с помощью PHP-локон, закодированный текст в искаженном виде, как этот

φîƂȂI ݂ ȂN`R ~ T C g i A b g R X j ɂ ܂ I

Я пробовал:

curl_setopt($ch, CURLOPT_ENCODING, 'Shift_JIS'); 

Я также попытался (после скачивания завихрение):

$output_str = mb_convert_encoding($curl_response, 'Shift_JIS', 'auto'); 
    $output_str = mb_convert_encoding($curl_response, 'SJIS', 'auto'); 

Но это тоже не сработает.

Вот полный код

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
     'Accept-Language: en-US,en;q=0.5', 
     'Connection: keep-alive' 
    )); 

    //curl_setopt($ch, CURLOPT_ENCODING, 'SJIS'); 
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    $response = curl_exec($ch); 
+0

Может это быть сжаты? http://stackoverflow.com/questions/310650/decode-gzipped-web-page-retrieved-via-curl-in-php – JimL

+0

может быть. Как справиться с этим в cURL? – hvs

+0

Это объясняется на странице, которую я связал с – JimL

ответ

6

Эта страница не возвращает правильный HTML, это на самом деле Javascript. Если вы выберете его с помощью curl и выведете его, добавьте header('Content-type: text/html; charset=shift_jis'); в свой код, и когда вы загрузите его в Chrome, символы будут отображаться правильно.

Поскольку HTML не указывает набор символов, вы можете указать его с сервера с помощью header().

Чтобы действительно преобразовать кодировку, так что будет отображаться должным образом в вашем терминале, вы можете попробовать следующее:

Использование iconv() преобразовать в UTF-8

$curl_response = iconv('shift-jis', 'utf-8', $curl_response); 

Использование mb_convert_encoding() для преобразования до UTF-8

$curl_response = mb_convert_encoding($curl_response, 'utf-8', 'shift-jis'); 

Оба эти метода работали для меня, и я смог увидеть, что японские символы отображаются на моем терминале правильно.

UTF-8 должно быть хорошо, но если вы знаете, что ваша система использует что-то другое, вы можете попробовать это вместо этого.

Надеюсь, что это поможет.

+0

Я пытаюсь получить доступ к японским символам через php-скрипт.Я не могу использовать браузер. Является ли это возможным? – hvs

+0

@hvs Просто используйте метод 'iconv()'. Я просто тестировал его, отлично работает. Вы можете использовать его в обычном PHP-скрипте, а не в веб-странице. – Anonymous

+1

@hvs, 'mb_convert_encoding()' должен работать. В исходном коде вы использовали неправильный порядок параметров. См. Http://php.net/manual/en/function.mb-convert-encoding.php –

0

Следующий код выведет японские символы правильно в браузере: -

<?php 

// create a new cURL resource 
$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, $setUrlHere); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

// grab URL content 
$response = curl_exec($ch); 

// close cURL resource, and free up system resources 
curl_close($ch); 

header('Content-type: text/html; charset=shift_jis'); 
echo $response; 
+0

Невозможно использовать браузер, так как это php-скрипт, запущенный на сервере, и записывающий прямо в db. – hvs

Смежные вопросы