Php 卷曲问题:URL中的Umlauts
我在获取包含Umlauts(例如“ü”)的URL时遇到问题 例如“”: 我的剧本:Php 卷曲问题:URL中的Umlauts,php,curl,Php,Curl,我在获取包含Umlauts(例如“ü”)的URL时遇到问题 例如“”: 我的剧本: function getUrlContent($url) { //echo $url; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_TIMEOUT, 30)
function getUrlContent($url)
{
//echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 10 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_ENCODING ,"UTF-8");
$response=curl_exec($ch);
$i = curl_getinfo($ch);
echo "<pre>";
print_r($i);
return $response;
}
$url="http://www.ebay.de/bhp/kühlschrank";
$response = getUrlContent($url);
函数getUrlContent($url)
{
//echo$url;
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_TIMEOUT,30);//10秒后超时
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_头,1);
curl_setopt($ch,CURLOPT_编码,“UTF-8”);
$response=curl\u exec($ch);
$i=curl\u getinfo($ch);
回声“;
印刷品(一元);;
返回$response;
}
$url=”http://www.ebay.de/bhp/kühlschrank“;
$response=getUrlContent($url);
它总是导致404
有什么想法吗?您需要
utf8\u decode()
这个$url参数并添加一个cURL
参数<代码>跟随位置
Array
(
[url] => http://pages.ebay.com/messages/DE_page_not_responding.html?RlogId=t6awipp%60c%7Fs%3F%3Ctof2e34e*%3B4c3-144258a5d5d-0x1f0
[content_type] => text/html;charset=UTF-8
[http_code] => 200
[header_size] => 1233
[request_size] => 264
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 1
[total_time] => 1.235
[namelookup_time] => 0.266
[connect_time] => 0.485
[pretransfer_time] => 0.485
[size_upload] => 0
[size_download] => 4611
[speed_download] => 3733
[speed_upload] => 0
[download_content_length] => 4611
[upload_content_length] => 0
[starttransfer_time] => 0.735
[redirect_time] => 0.469
[certinfo] => Array
(
)
[primary_ip] => 66.135.205.14
[primary_port] => 80
[local_ip] => 192.168.1.9
[local_port] => 61581
[redirect_url] =>
)
穷人的另一种解决方案是使用URL的普通US-ASCII验证为Curl提供:
<?php
function getUrlContent($url)
{
//echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 10 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_ENCODING ,"UTF-8");
$response=curl_exec($ch);
$i = curl_getinfo($ch);
echo "<pre>";
print_r($i);
return $response;
}
$url="http://www.ebay.de/bhp/" . rawurlencode( "kühlschrank" );
$response = getUrlContent($url);
?>
我是通过使用Firefox获取页面并从位置栏复制URL获得的,但您也可以从PHP执行此操作:
Array
(
[url] => http://www.ebay.de/bhp/k%C3%BChlschrank
[content_type] => text/html;charset=utf-8
[http_code] => 200
[header_size] => 1007
[request_size] => 94
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 1.669702
[namelookup_time] => 0.606492
[connect_time] => 0.744441
[pretransfer_time] => 0.744556
[size_upload] => 0
[size_download] => 44032
[speed_download] => 26371
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => 0
[starttransfer_time] => 1.386599
[redirect_time] => 0
[certinfo] => Array
(
)
[primary_ip] => 23.2.16.17
[primary_port] => 80
[local_ip] => 10.1.1.2
[local_port] => 56592
[redirect_url] =>
)
Curl不会为您编码URL,您必须这样做。也就是说,它必须是URL编码的。严格地说,你不应该只解码UTF8,因为它不是一回事。你应使用:
当然,我刚刚进行了测试,页面希望URL中包含ISO-8859-1。出于某种原因,我假设所有现代浏览器都默认为UTF-8…@alvarog.Vicario,我认为Google Chrome
Version 32.0.1700.107 m
不是。在这个版本中,响应HTML代码与浏览器中的不同。(*%3B4c3-144258a5d5d-0x1f0)尝试在传递到getUrlContent()之前对url进行编码
// Assuming UTF-8
$url="http://www.ebay.de/bhp/" . rawurlencode("kühlschrank");
<?php
function getUrlContent($url)
{
//echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout after 10 seconds
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_ENCODING ,"UTF-8");
$response=curl_exec($ch);
$i = curl_getinfo($ch);
echo "<pre>";
print_r($i);
return $response;
}
$url="http://www.ebay.de/bhp/" . rawurlencode( "kühlschrank" );
$response = getUrlContent($url);
?>
Array
(
[url] => http://www.ebay.de/bhp/k%C3%BChlschrank
[content_type] => text/html;charset=utf-8
[http_code] => 200
[header_size] => 1007
[request_size] => 94
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 1.669702
[namelookup_time] => 0.606492
[connect_time] => 0.744441
[pretransfer_time] => 0.744556
[size_upload] => 0
[size_download] => 44032
[speed_download] => 26371
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => 0
[starttransfer_time] => 1.386599
[redirect_time] => 0
[certinfo] => Array
(
)
[primary_ip] => 23.2.16.17
[primary_port] => 80
[local_ip] => 10.1.1.2
[local_port] => 56592
[redirect_url] =>
)