考虑以下网址: click here
日语字符有一些编码。我的电脑上的Firefox浏览器能够自动检测并显示字符。另一方面,对于Chrome,我必须手动将编码更改为“Shift_JIS”才能看到日文字符。
如果我尝试通过PHP-cURL访问内容,则编码文本会出现像这样的乱码
φîƂȂI݂ȂN`R〜TCgiAb gRXjɂ܂我
我试过了:
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 :(得分: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应该没问题,但是如果你知道你的系统使用了不同的东西,你可以试试。
希望有所帮助。
答案 1 :(得分: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;