CURL导入字符编码问题

5

我正在使用CURL导入一些代码。然而,在法语中,所有的字符都变得很奇怪。例如:Bonjour ...

我无法更改导入代码中的任何内容。有没有什么办法可以在我的这一侧来解决这个问题?

谢谢


你的情况不太清楚。PHP 在哪里发挥作用?你下载的内容是 PHP 代码吗?之后你用什么工具查看文本呢?很可能只是需要使用适当的编码处理已下载的数据。但是,你需要知道使用的编码方式(可以查看 HTTP 标头以获取可能的提示,尽管它可能没有正确设置),以及如何使用正确的编码方式。在了解你获取数据后的操作之前,我们无法帮助你解决后者。 - Jon Skeet
你的情况不太清楚。PHP 是在哪里发挥作用的?你下载的内容是 PHP 代码吗?之后你使用什么来查看文本? - David J.
5个回答

14

正如Jon Skeet所指出的,很难理解你的情况,但是如果你只能访问最终文本,你可以尝试使用iconv来更改文本编码。

即:

$text = iconv("Windows-1252","UTF-8",$text);

我曾经遇到过类似的问题(用意大利语和特殊字符),我是这样解决的。

尝试不同的组合(UTF-8、ISO-8859-1、Windows-1252)。


7

我有一个类似的问题。我试图循环遍历所有输入和输出字符集的组合,但没有任何帮助!:(

然而,我能够访问实际获取数据的代码,这就是罪魁祸首所在的地方。数据是通过cURL获取的。添加

 curl_setopt($ch,CURLOPT_BINARYTRANSFER,true);

已解决。

一个方便的代码集,用于尝试一组字符集的所有可能组合:

$charsets = array(  
        "UTF-8", 
        "ASCII", 
        "Windows-1252", 
        "ISO-8859-15", 
        "ISO-8859-1", 
        "ISO-8859-6", 
        "CP1256"
        ); 

foreach ($charsets as $ch1) { 
    foreach ($charsets as $ch2){ 
        echo "<h1>Combination $ch1 to $ch2 produces: </h1>".iconv($ch1, $ch2, $text_2_convert); 
    } 
} 

3

PHP默认使用UTF-8编码,因此我发现以下代码可以工作:

$text = iconv("UTF-8","Windows-1252",$text);


3
您可以替换您的
$data = curl_exec($ch);

by

$data = utf8_decode(curl_exec($ch));

我曾经遇到过同样的问题,这个方法对我很有效。


1
重要提示:在转换包含欧元符号的UTF8数据时,请勿使用utf_decode函数。utf_decode将数据转换为ISO-8859-1字符集。但是,ISO-8859-1字符集不包含欧元符号,因此欧元符号将被转换为问号字符“?”。为了正确转换带有欧元符号的UTF8数据,您必须使用:iconv(“UTF-8”,“CP1252”,$data) - Thoman

2

我目前遇到了类似的问题,我正在尝试使用cURL编写一个简单的HTML <title> 导入器。以下是我迄今为止所做的事情的概述:

  1. 通过cURL获取HTML
  2. 使用curl_getinfo()检查响应头中是否有任何编码提示,并通过正则表达式进行匹配
  3. 解析HTML以查看content-type元标记和<title>标记(是的,我知道后果
  4. 比较内容类型、头部和元标记,如果不同,则选择元标记,因为我们知道没有人关心他们的httpd配置,并且有很多肮脏的解决方法可以使用它
  5. 对字符串进行iconv()
  6. 每天都希望当有人不遵循标准时,$DEITY会惩罚他/她直到永远,因为这将节省我解析元标记的时间

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接