1

我采用了一个名为 Google Translation 的 Alfred 工作流程,我编辑并添加了一些脚本。但是当我从葡萄牙语或法语翻译成英语时,出现了奇怪的字符:pão --> paÌo。

我已经编辑了 PHP 文件。我在 StackOverFlow 上进行了很多搜索,关于添加对所有语言的额外和特殊语言的支持 - 拉丁语、西里尔语和其他 - UTF8。我尽我所能尝试了所有方法,但它不起作用。

<?php
header('Content-Type: text/html; charset=utf-8');

function googleTranslate($request, $sourceLanguage, $targetLanguage)
{
    $url = 'http://translate.google.com.br/translate_a/t?client=p&text='.urlencode($request).'&hl=pt-BR&lr=lang_pt'.$sourceLanguage.'&tl='.$targetLanguage.'&multires=1&ssel=0&tsel=0&sc=1';

    $defaults = array(                                  CURLOPT_RETURNTRANSFER => true,                 CURLOPT_URL => $url,
        CURLOPT_FRESH_CONNECT => true
    );

    $ch  = curl_init();
    curl_setopt_array($ch, $defaults);
    $out = curl_exec($ch);
    $err = curl_error($ch);
    curl_close($ch);

    $result = '<?xml version="1.0"?><items>';

    $json = json_decode(utf8_encode($out));
    if (isset($json->dict)) {
        $googleResults = $json->dict[0]->entry;
        if (is_array($googleResults)) {
            foreach ($googleResults as $translatedData) {
                $result .= '<item uid="mtranslate" arg="'.$translatedData->word.'">';
                $result .= '<title>'.$translatedData->word.'</title>';
                $result .= '<subtitle>'.implode(', ', $translatedData->reverse_translation).'</subtitle>';
                $result .= '<icon>'.$targetLanguage.'.png</icon>';
                $result .= '</item>';
            }
        }
    } elseif (isset($json->sentences)) {
        foreach ($json->sentences as $sentence) {
            $result .= '<item uid="mtranslate" arg="'.$sentence->trans.'">';
            $result .= '<title>'.$sentence->trans.'</title>';
            $result .= '<subtitle>'.$sentence->orig.'</subtitle>';
            $result .= '<icon>'.$targetLanguage.'.png</icon>';
            $result .= '</item>';
        }
    } else {
        $result .= '<item uid="mtranslate">';
        $result .= '<title>No results found</title>';
        $result .= '</item>';
    }

    $result .= '</items>';
    echo $result;
}

// googleTranslate('Wohnmobil', 'de', 'en’, ‘pt’, ‘fr’);

?>

我还尝试将“echo”PHP 脚本添加到 at Alfred 应用程序的脚本编辑器(Mac 应用程序)。

4

1 回答 1

2

json_decode

你可以json_decode($array, JSON_UNESCAPED_UNICODE)php 5.4.0上使用

对于PHP 5.3用户,您可以将此函数用于UTF-8

function my_json_encode($arr)
{
    //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding
   array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); });
   return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');

 }

前任:

my_json_encode($newArray

于 2013-09-25T10:58:04.370 回答