在我的PHP脚本中,我尝试将utf8字符发送到谷歌翻译网站,以便他们向我发送文本的翻译,但这不适用于UTF8字符,如中文,阿拉伯语和俄语,我不能找出原因。如果我尝试将'какдела'翻译成英文,我可以使用以下链接: https://translate.googleapis.com/translate_a/single?client=gtx&sl=ru&tl=en&dt=t&q=какдела
它会返回这个:[[[“你好吗”,“какдела”,,, 1]],“ru”]
精确的翻译,正是我想要的,但如果我尝试在PHP中重新创建它,我会这样做(我在开头使用了字节,因为我的未来脚本将使用字节作为起点):
<?php
$bytes = array(1082,1072,1082,32,1076,1077,1083,1072); // bytes of: как дела
$str = "";
for($i = 0; $i < count($bytes); ++$i) {
$str .= json_decode('"\u' . '0' . strtoupper(dechex($bytes[$i])) . '"'); // returns string: как дела
}
$from = 'ru';
$to = 'en';
$url = 'https://translate.googleapis.com/translate_a/single?client=gtx&sl=' . $from . '&tl=' . $to . '&dt=t&q=' . $str;
$call = fopen($url,"r");
$contents = fread($call,2048);
print $contents;
?>
输出:[[[“RєRRєRґRμR°\”°F“,”какдРμла“,,, 0]],”ru“]
输出没有意义,似乎我的PHP脚本发送字符串'какдРμла'为我翻译成英语。我读了一些关于在URI(或url)中为谷歌制作UTF-8字符的信息。它说我应该将我的字节转移到UTF-8代码单元并将它们放在我的URL中。我还没弄清楚如何将字节传输到UTF-8代码单元,但我首先想尝试它是否有效。我开始将我的文本'какдела'转换为代码单元(带有百分比的URL)以自己测试它。这导致以下链接:https://translate.googleapis.com/translate_a/single?client=gtx&sl=ru&tl=en&dt=t&q=%D0%BA%D0%B0%D0%BA+%D0%B4%D0%B5%D0%BB%D0%B0
在浏览器中测试时,它返回:[[[“你好吗”,“какдела”,,, 1]],“ru”]
再一次很好的翻译,看起来它有效,所以我尝试在我的脚本中使用以下代码实现它:
<?php
$from = 'ru';
$to = 'en';
$text = "%D0%BA%D0%B0%D0%BA+%D0%B4%D0%B5%D0%BB%D0%B0"; // code units of: как дела
$url = 'https://translate.googleapis.com/translate_a/single?client=gtx&sl=' . $from . '&tl=' . $to . '&dt=t&q=' . $text;
$call = fopen($url,"r");
$contents = fread($call,2048);
print $contents;
?>
此脚本输出:[[[“RєRRєRґRμR°\”°F“,”какдРμла“,,, 0]] ,,”ru“]
我的脚本再次输出我想要的内容以及在我自己的浏览器中测试这些URL时得到的内容。如果我使用PHP文件中的链接,我无法弄清楚我做错了什么以及为什么谷歌会回应一堆乱七八糟的字符。
有人知道如何获得我想要的输出吗?提前谢谢!
更新了以UTF-8设置字符串的代码(不工作)
我在PHP文件的顶部添加了很多设置,以确保所有内容都是UTF8格式。我还在中途添加了一个mb_convert_encoding,但输出仍然是错误的。 fopen函数不会向谷歌发送正确的UTF-8字符串。
输出我得到:
URL: https://translate.googleapis.com/translate_a/single?client=gtx&sl=ru&tl=en&dt=t&q=%D0%BA%D0%B0%D0%BA%20%D0%B4%D0%B5%D0%BB%D0%B0
Encoding: ASCII
File contents: [[["RєR Rє RґRμR ° \"° F","как дела",,,0]],,"ru"]
我使用的代码:
<?php
header('Content-Type: text/html; charset=utf-8');
$TYPO3_CONF_VARS['BE']['forceCharset'] = 'utf-8';
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_language('uni');
mb_regex_encoding('UTF-8');
ob_start('mb_output_handler');
$from = 'ru';
$to = 'en';
$text = rawurlencode('как дела');
$url = 'https://translate.googleapis.com/translate_a/single?client=gtx&sl=' . $from . '&tl=' . $to . '&dt=t&q=' . $text;
$url = mb_convert_encoding($url, "UTF-8", "ASCII");
$call = fopen($url,"r");
$contents = fread($call,2048);
print 'URL: ' . $url . '<br>';
print 'Encoding: ' . mb_detect_encoding($url) . '<br>';;
print 'File contents: ' . $contents;
?>