PHP 之谷歌翻译

一、效果图

 

 二、示例代码

class GoogleTranslate
{
    const GOOGLE_URL = 'https://translate.google.cn/translate_a/';

public function shr32($x, $bits) { if ($bits <= 0) { return $x; } if ($bits >= 32) { return 0; } $bin = decbin($x); $l = strlen($bin); if ($l > 32) { $bin = substr($bin, $l - 32, 32); } elseif ($l < 32) { $bin = str_pad($bin, 32, '0', STR_PAD_LEFT); } return bindec(str_pad(substr($bin, 0, 32 - $bits), 32, '0', STR_PAD_LEFT)); } //这个就是javascript的charCodeAt //PHP版本的在这里http://www.phpjiayuan.com/90/225.html public function charCodeAt($str, $index) { $char = mb_substr($str, $index, 1, 'UTF-8'); if (mb_check_encoding($char, 'UTF-8')) { $ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8'); return hexdec(bin2hex($ret)); } else { return null; } } //直接复制google public function RL($a, $b) { for ($c = 0; $c < strlen($b) - 2; $c += 3) { $d = $b{$c + 2}; $d = $d >= 'a' ? $this->charCodeAt($d, 0) - 87 : intval($d); $d = $b{$c + 1} == '+' ? $this->shr32($a, $d) : $a << $d; $a = $b{$c} == '+' ? ($a + $d & 4294967295) : $a ^ $d; } return $a; } //静态TKK,动态获取请使用另外一个方法 public function TKK() { $a = 561666268; $b = 1526272306; return 406398 . '.' . ($a + $b); } //直接复制google public function TL($a) { $tkk = explode('.', $this->TKK()); $b = $tkk[0]; for ($d = array(), $e = 0, $f = 0; $f < mb_strlen($a, 'UTF-8'); $f++) { $g = $this->charCodeAt($a, $f); if (128 > $g) { $d [$e++] = $g; } else { if (2048 > $g) { $d [$e++] = $g >> 6 | 192; } else { if (55296 == ($g & 64512) && $f + 1 < mb_strlen($a, 'UTF-8') && 56320 == ($this->charCodeAt($a, $f + 1) & 64512)) { $g = 65536 + (($g & 1023) << 10) + ($this->charCodeAt($a, ++$f) & 1023); $d [$e++] = $g >> 18 | 240; $d [$e++] = $g >> 12 & 63 | 128; } else { $d [$e++] = $g >> 12 | 224; $d [$e++] = $g >> 6 & 63 | 128; } } $d [$e++] = $g & 63 | 128; } } $a = $b; for ($e = 0; $e < count($d); $e++) { $a += $d [$e]; $a = $this->RL($a, '+-a^+6'); } $a = $this->RL($a, "+-3^+b+-f"); $a ^= $tkk[1]; if (0 > $a) { $a = ($a & 2147483647) + 2147483648; } $a = fmod($a, pow(10, 6)); return $a . "." . ($a ^ $b); } public function translate($sl, $tl, $q, $param = 't?client=webapp', $method = 'get') { $tk = $this->TL($q); $q = urlencode(stripslashes($q)); $url = self::GOOGLE_URL . $param . "&sl=" . $sl . "&tl=" . $tl . "&hl=" . $tl . "&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&dt=at&ie=UTF-8&oe=UTF-8&otf=2&ssel=0&tsel=0&kc=1&tk=" . $tk; if ($method == 'get') $url .= "&q=" . $q; $response = trim($this->curl_request($url), '"'); if ($response) { return $response; } return null; } function curl_request($url, $data = null, $method = 'get', $https = true) { $ch = curl_init();//初始化 curl_setopt($ch, CURLOPT_URL, $url);//访问的URL curl_setopt($ch, CURLOPT_HEADER, false);//设置不需要头信息 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//只获取页面内容,但不输出 if ($https) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//https请求 不验证证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//https请求 不验证HOST } if (strtolower($method) == 'post') { curl_setopt($ch, CURLOPT_POST, true);//请求方式为post请求 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//请求数据 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data) )); } $result = curl_exec($ch);//执行请求 curl_close($ch);//关闭curl,释放资源 return $result; } } echo (new GoogleTranslate())->translate('zh','en','挂号直接过来医院就好了')."<br>"; echo (new GoogleTranslate())->translate('zh','en','麻烦留一下地址和联系方式,我们业务经理会电话和你联系')."<br>";

 

posted @ 2021-04-05 10:35  样子2018  阅读(300)  评论(0编辑  收藏  举报