2017-02-18 3 views
0

を失敗した私は彼らが私のテキストの翻訳を送信するためのウェブサイトを翻訳GoogleにUTF8文字を送信しようとするが、これは以下のようなUTF8文字では動作しません。中国語、アラビア語、ロシア語で、なぜ私は理解できません。私は英語に 'какдела' 翻訳しようとした場合、私は、このリンクを使用することができます:https://translate.googleapis.com/translate_a/single?client=gtx&sl=ru&tl=en&dt=t&q=какделаPHPは、URLエンコードが私のPHPスクリプトで

をそして、それは、これを返します:[[[ "какдела"、 "お元気ですか" ,,, 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スクリプトが私のために英語に翻訳するために文字列「какдРμла」を送ることが表示されます。私はUTF-8文字をURI(またはURL)でGoogleで読むことができるようにするために何かを読んでいます。それは私のバイトを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ファイルでリンクを使用すると、文字が混乱してGoogleが応答します。

誰かが私が欲しいの出力を取得する方法を知っていますか?前もって感謝します!

UTF8に文字列を設定するために更新されたコード、(動作しない)

私はすべてがUTF8形式であることを確認するPHPファイルの先頭に多くの設定を追加しました。また、途中でmb_convert_encodingを追加しましたが、出力が間違っています。 fopen関数は正しいUTF-8文字列をgoogleに送信しません。私が使用

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; 
?> 
+2

PHPはデフォルトではUTF-8エンコードされていません。手動でこれをPHPコードで設定する必要があります。 [UTF-8について読む](http://stackoverflow.com/questions/279170/utf-8-all-the-way-through)['mb_string'](http://www.php.net/manual/en/book.mbstring.php)属性を設定する必要があります。 – Martin

+1

*** edit ***あなたの質問は、コメントにコードを投稿しないでください。かなり読めません。乾杯 – Martin

+0

私はオープニングポストを更新しました。 – Sportline83

答えて

0

を私が手

出力!私はこれらのフォーラムからではなく、ユーザエージェントの設定に関するthis stackoverflowの投稿を参照する別のヒントを得ました。もう少し研究を重ねた結果、this答えが私の問題の解決策であることが分かりました。今はすべて正常に動作します!

関連する問題