【问题标题】:How do I get cURL to return cyrillic characters in such a way, that I can proccess them with regex?如何让 cURL 以某种方式返回西里尔字符,以便我可以使用正则表达式处理它们?
【发布时间】:2016-03-09 12:13:13
【问题描述】:

标签: php curl cyrillic


【解决方案1】:

我是否必须添加如下内容: curl_setopt($ch, CURLOPT_HTTPHEADER,array ("Content-Type: text/html; charset=windows-1251"));这样可以吗?

CURL 无关紧要,它不会解释内容。

如果您想对该字符串运行正则表达式,请确保输入的正则表达式使用相同的字符集。我建议通过更改响应的编码来做到这一点:

$w1251 = $reponse;
$utf8 = mb_convert_encoding($w1251, "UTF-8", "Windows-1251 (CP1251)");

如果您的 PHP 源代码文件也是 UTF-8 格式,则任何特殊字符都应该匹配得很好。

或者,您也可以更改源代码的字符集,但我不建议这样做,因为有人可能会不小心转换它。


同样,当您显示文本(在 HTML 页面上)时,请确保字符集与内容匹配。

如果您想显示 w1251 内容,您可以添加类似的meta 标签,字符将正确显示。您还可以将字符串转换为 utf-8 并为 utf-8 添加元标记。

【讨论】:

  • 它的进展,但还没有完成。现在,我得到的不是��������,而是:ãðàä Ñîôèÿ、Ëîçåíåö、800 êâ.ì、Ïðåäëàãàìå âè êúùà â êâàðòàë Ëîçåíåö ñ îòëè÷íî。我猜测编码转换中的某些内容不太正确。我如何检查它到底是什么,或者它可能是 html 的可视化。我通过回显从 curl 中获得的内容来做到这一点。如何向其中添加元标记?还是你的意思是我将它添加到我正在回显 html 内容的 php 文件中?
  • 嗯,是的,这看起来根本不对。您可以自己打开请求页面并将 HTML 页面保存到文件中。然后代替执行 CURL 请求读取保存的文件。这将删除一个步骤。还要验证您使用的编码是否正确。
  • 它确实删除了一个步骤,但从长远来看它并没有真正有用,因为当我完成时这必须是一个自动化过程。我在这一点上进行所有显示只是为了确保一切正常,即捕捉像我现在遇到的问题。您如何建议我验证我使用的是正确的编码?
  • .. 通过下载文件并检查。删除步骤是为了调试。
  • 对不起,我是个笨蛋,我是新手。我下载了它,里面的内容出奇地少,可能是因为它的所有实际信息都在 *.cgi 后面。我从下载的页面得到的是:<html><head> <title>mask</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> </head> <frameset rows="0,*" frameborder="NO" border="0" framespacing="0"> <frame name="emptyframe" scrolling="NO" noresize="noresize"> <frame name="obiaviframe" src="obiavi.cgi?s0=&s1="> </frameset> </html>
【解决方案2】:

尝试以下标题

$ch =  curl_init();

                $header[] = "Accept: text/xml,application/xml,application/xhtml+xml,";
                $header[] = "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
                $header[] = "Cache-Control: max-age=0";
                $header[] = "Connection: keep-alive";
                $header[] = "Keep-Alive: 300";
                $header[] = "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8";
                $header[] = "Accept-Charset: windows-1251, *;q=0.1";
                $header[] = "Accept-Encoding: deflate, identity, *;q=0";
                $header[] = "Pragma: "; //browsers keep this blank.

curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

【讨论】:

  • 我会试试的,虽然我不清楚其中大部分是做什么的。几个问题。它的保加利亚西里尔字母不是俄语,那么这条线将如何改变: $header[] = "Accept-Language: ru-RU,ru;q=0.9,en;q=0.8";所有这些 q=number 是什么意思?
  • q=number - 好吧,它用于偏好。你可以跳过我认为的。尝试遵循 $header[] = "Accept-Language: bg and for charset - windows-1251 应该可以正常工作
猜你喜欢
  • 2016-05-24
  • 1970-01-01
  • 2011-12-16
  • 2010-12-15
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多