论坛首页 编程语言技术论坛

PHP使用google translate API

浏览 9062 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-11   最后修改:2009-02-12
PHP

最近要做一个要用到翻译功能的插件,很自然就想到了利用google translate的强大,但是google之开放了ajax的api,没有开放语言的接口。这也不难,通过firebug的调查,发现google在翻译的时候调用了一个远程url,据个例子

http://translate.google.com/translate_a/t?client=t&text=computer&sl=en&tl=zh_CN

 

其中client没有更改,text表示着要翻译的文本,sl貌似是文本的源语言,tl表示着翻译目标语言。根据google的结果,大致有了个模型

class Google_API_translator {
   
    public $out = "";

    function translate() {
        $this->out = "";
		$text = urlencode("computer");//要翻译的单词
		
        $google_translator_url = "http://translate.google.com/translate_a/t?client=t&text=".$text."&sl=en&tl=zh_CN";
//拼凑google翻译的api url		
        $gphtml = $this->postPage(array("url" => $google_translator_url));
		
        $this->out = $gphtml;
        return $this->out;
    }
    function postPage($opts) {
        $html = "";
        if($opts["url"] != "") {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $opts["url"]);

            $html = curl_exec($ch);
			
			
            if(curl_errno($ch)) $html = "";
            curl_close ($ch);
        }
        return $html;
    }
}

$g = new Google_API_translator();

$g->translate();

 很完美,返回的结果中没有任何编码问题。从google返回的中文编码完全正确。

 

接下来,能不能反向翻译,从中文到英文哪?

class Google_API_translator {
   
    public $out = "";

    function translate() {
        $this->out = "";
		$text = urlencode("计算机");//要翻译的单词
		
        $google_translator_url = "http://translate.google.com/translate_a/t?client=t&text=".$text."&sl=zh_CN&tl=en";
		
		echo $google_translator_url;
        $gphtml = $this->postPage(array("url" => $google_translator_url));
		
        $this->out = $gphtml;
        return $this->out;
    }
    function postPage($opts) {
        $html = "";
        if($opts["url"] != "") {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $opts["url"]);

            $html = curl_exec($ch);
			
			
            if(curl_errno($ch)) $html = "";
            curl_close ($ch);
        }
        return $html;
    }
}

$g = new Google_API_translator();

$g->translate();

 问题出现了,返回的是一个乱码。诡异的是,这次接受的是google发送过来的英文单词,怎么会有编码错误?

 

是php的curl无法发送unicode编码或者google在接受的过程中出现了问题吗?

 

echo $google_translator_url;

 得到的url是

http://translate.google.com/translate_a/t?client=t&text=%E8%AE%A1%E7%AE%97%E6%9C%BA&sl=zh_CN&tl=en

 直接把这个url输入浏览器的地址栏,没有任何问题(IE,Firefox均能通过)。

 

假设途中unicode的传送出现了解析方面的问题,在api的url上更改了一下,把"&sl=zh_CN&tl=en"更改为完全错误的参数

http://translate.google.com/translate_a/t?client=t&text=%E8%AE%A1%E7%AE%97%E6%9C%BA&sl=en&tl=en

 

奇怪了这次php页面倒是能够接受到google发回来的中文字符串,但是死活就是无法显示使用正确的编码参数google发送过来结果。

 

 

我认为,疑点是是否存在在:

1. 因为google接受的是中文编码,所以发送过的也是按照某种中文编码的字符?FF或者IE足够聪明把这个字符串转换了一下,但是php的curl就没有这么聪明了。

论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics