【问题标题】:cURL font encoding-errorcURL 字体编码错误
【发布时间】:2015-08-14 19:38:25
【问题描述】:

我想通过 cURL 从 this page 获取内容。

这是我的代码:

$url = $_GET["url"];
$url = str_replace(" ", "%20", $url);
$curlSession = curl_init();
curl_setopt($curlSession, CURLOPT_URL, $url);
curl_setopt($curlSession, CURLOPT_BINARYTRANSFER, true);
curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, true);
$jsonData = curl_exec($curlSession);
curl_close($curlSession);
if (strpos($url, "toomva.com") >= 0) {
     $jsonData = str_replace("toomva.com", "http://av.bsquochoai.ga ⇔ ", $jsonData);
}
if (strpos($url, "Toomva -") >= 0){
    $jsonData = str_replace("toomva.com", "http://av.bsquochoai.ga ⇔ ", $jsonData);
}
echo($jsonData);

Here你可以找到现场演示。

我的问题是返回的文本不符合我的预期。它有很多������:

��1� ���0�0�:�0�0�:�2�4�,�4�0�0� �-�-�>���0�0�:�0�0 �:�3�3�,�1�4�0� “我……我…………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………” “我……我……” 嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯 � �                                           ...

你能帮我解决这个问题吗?

【问题讨论】:

    标签: php curl


    【解决方案1】:

    这是您尝试访问的文件的前几个字节:

    $ curl -s 'http://toomva.com/Data/subtitle/Duncan%20James%20ft.%20Keedie%20-%20I%20Believe%20My%20Heart.Vie_Syned.srt' | xxd | head
    0000000: fffe 3100 0d00 0a00 3000 3000 3a00 3000  ..1.....0.0.:.0.
    0000010: 3000 3a00 3200 3400 2c00 3400 3000 3000  0.:.2.4.,.4.0.0.
    0000020: 2000 2d00 2d00 3e00 2000 3000 3000 3a00   .-.-.>. .0.0.:.
    0000030: 3000 3000 3a00 3300 3300 2c00 3100 3400  0.0.:.3.3.,.1.4.
    0000040: 3000 0d00 0a00 4d00 d71e 6900 2000 6b00  0.....M...i. .k.
    0000050: 6800 6900 2000 6100 6e00 6800 2000 7400  h.i. .a.n.h. .t.
    0000060: 7200 f400 6e00 6700 2000 7400 6800 a51e  r...n.g. .t.h...
    0000070: 7900 2000 6b00 6800 7500 f400 6e00 2000  y. .k.h.u...n. .
    0000080: 6d00 b71e 7400 2000 6500 6d00 2c00 2000  m...t. .e.m.,. .
    0000090: 7400 6800 bf1e 2000 6700 6900 6100 6e00  t.h... .g.i.a.n.
    

    它以0xff 0xfe 开头,这是UTF-16 Little Endian 的byte order mark。这些信息确实应该在文件的 HTTP 标头中提供,但在这种情况下显然不是。

    您可以使用 PHP 的 mb_convert_encoding() 函数将文件的内容更改为您用于网站的任何字符集。例如,这会将其转换为 utf-8:

    $src = file_get_contents('http://toomva.com/Data/subtitle/Duncan%20James%20ft.%20Keedie%20-%20I%20Believe%20My%20Heart.Vie_Syned.srt');
    $utf8src = mb_convert_encoding($src,'UTF-8','UTF-16LE');
    header('Content-Type: text/plain; charset=utf-8');
    die($utf8src);
    

    但是,该文件不包含 JSON 数据。以下是前几行:

    1
    00:00:24,400 --> 00:00:33,140
    Mỗi khi anh trông thấy khuôn mặt em, thế gian này như chợt tan biến
    
    2
    00:00:33,140 --> 00:00:42,700
    Tất cả đều phơi bày trong một ánh nhìn thoáng qua
    

    【讨论】:

      【解决方案2】:

      在回显 jsonDate 时使用 utf8_encode :

      echo(utf8_encode($jsonData));
      

      【讨论】:

        猜你喜欢
        • 2014-09-11
        • 2011-03-24
        • 2016-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多