【问题标题】:setting output from exec to UTF-8将 exec 的输出设置为 UTF-8
【发布时间】:2017-03-12 16:02:49
【问题描述】:

我正在编写一个 php 脚本,使用 phantomjs 在网站上执行 javascript,然后将其内容返回到 php 脚本。我的问题是返回的输出显然不是 UTF-8。我试过setlocale,iconv 甚至utf8_encode 都没有工作。以下是代码:

inspectOffer.php

<?php

$url=$argv[1];
$locale='cs_CZ.UTF-8';
setlocale(LC_ALL,$locale);
putenv('LC_ALL='.$locale);

$phantom_script= dirname(__FILE__). '/inspectOffer.js';
$response =  exec ('phantomjs ' . $phantom_script. ' '.$url,$out);

foreach ($out as $index =>$value){
    $output.=$value;
}
$output=iconv(mb_detect_encoding($output, mb_detect_order(), true), "UTF-8", $output);
$output=utf8_encode($output);

var_dump($output);

inspectOffer.js

var webPage = require('webpage');
var page = webPage.create();

var system = require('system');
var args = system.args;
var url=args[1];

page.open(url, function(status) {
    console.log(page.content);
    phantom.exit();
});

页面上有这样的东西:

V blízkosti Rezidence se nachází veškerá občanská vybavenost.

在输出中看起来像这样:

V bl├şzkosti Rezidence se nach├íz├ş ve┼íker├í ob─Źansk├í vybavenost.

在 windows 10 中从 cmd 执行脚本:

php inspectOffer.php https://www.sreality.cz/detail/prodej/byt/2+kk/karlovy-vary-dvory-/398053724

【问题讨论】:

    标签: javascript php utf-8 phantomjs


    【解决方案1】:

    我认为输出是 UTF-8,但开放编码是 DOS (CP 437) 或类似的东西

    您可以尝试保存它,然后使用该编码的编辑器重新打开以尝试它

    编辑:您可以尝试将此标签放在您的文档上:

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    

    【讨论】:

    • 将其写入文件解决了它!所以问题出在终端
    【解决方案2】:

    exec不支持这个,

    您可以通过 header 函数设置您的字符集,如下所示:

    header('Content-type: text/plain; charset=utf-8');
    

    【讨论】:

    • 还是一样的输出
    【解决方案3】:

    使用passthru 而不是exec,输出应该保持不变。

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 2016-10-11
      • 2019-04-12
      • 2018-03-04
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 2012-03-10
      • 2012-02-01
      相关资源
      最近更新 更多