2017-02-18 3 views
0

In meinem PHP Skript versuche ich, utf8 Zeichen an die Google Übersetzer Website für sie senden mir eine Übersetzung des Textes, aber das funktioniert nicht für UTF8 Zeichen wie Chinesisch, Arabisch und Russisch und ich kann nicht herausfinden, warum. Wenn ich versuche, 'как дела' auf Englisch zu übersetzen, könnte ich diesen Link: https://translate.googleapis.com/translate_a/single?client=gtx&sl=ru&tl=en&dt=t&q=как делаPHP mit UTF8 Zeichen in URL, URL Kodierung schlägt fehl

Und es würde zurückkehren dies: [[[ "Wie geht es dir", "как дела" ,,, 1]] ,, "ru"]

Eine gute Übersetzung, genau das, was ich wollte, aber wenn ich versuche, es in PHP neu zu erstellen, mache ich das (ich habe Bytes am Anfang verwendet, weil mein zukünftiges Skript Bytes als Ausgangspunkt verwenden wird):

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

Und es gibt: [[[ "RєR RєRґRμR ° \" ° F "" РєР ° РєРґРμР »Р °“ ,,, 0]] ,, "ru"]

Die Ausgabe macht keinen Sinn, es scheint, dass mein PHP-Skript die Zeichenfolge 'РєР ° РєРґРμР »Р °' sendet, um für mich ins Englische zu übersetzen. Ich habe gelesen, dass UTF-8-Zeichen in einer URI (oder URL) für Google lesbar gemacht werden. Es besagt, dass ich meine Bytes in UTF-8-Code-Einheiten übertragen und sie in meine URL einfügen soll. Ich habe noch nicht herausgefunden, wie man Bytes in UTF-8-Code-Einheiten überträgt, aber ich wollte zuerst versuchen, ob es funktioniert. Ich habe damit angefangen, meinen Text 'как дела' in Code-Einheiten (mit Prozent für URL) zu konvertieren, um es selbst zu testen. Dies führte in den folgenden Link: 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

Und wenn in Browser getestet es zurückgibt: [[[ "Wie geht es dir", "как дела" ,,, 1]] ,, "ru"]

Wieder eine feine Übersetzung, wie es scheint funktioniert es so versuchte ich es in meinem Skript mit dem folgenden Code zu implementieren:

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

Dieses Skript Ausgänge: [[[ "RєR Rє RґRμR ° \" ° F "" РєР ° Рє РґРμР »Р °" ,, 0]] ,, "ru"]

Wieder gibt mein Skript nicht aus, was ich will und was ich wann bekomme Ich teste diese URLs in meinem eigenen Browser. Ich kann nicht herausfinden, was ich falsch mache und warum Google mit einem Durcheinander von Zeichen reagiert, wenn ich den Link in meiner PHP-Datei verwende.

Weiß jemand, wie man die gewünschte Ausgabe bekommt? Danke im Voraus!

Aktualisierte Code-Strings in UTF-8 zu setzen, (nicht in Betrieb)

ich viele Einstellungen an der Spitze der PHP-Datei im UTF8-Format alles sicher zu machen hinzugefügt. Auch ich habe eine mb_convert_encoding auf halbem Weg hinzugefügt, aber die Ausgabe bleibt falsch. Die fopen-Funktion sendet nicht die richtige UTF-8-Zeichenfolge an Google. I

Ausgabe:

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"] 

-Code verwende ich:

<?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

Ihr PHP ist nicht standardmäßig UTF-8 codiert. Sie müssen dies manuell in PHP-Code einstellen. [Lesen Sie über UTF-8] (http://stackoverflow.com/questions/279170/utf-8-all-the-way-through).Sie müssen ['mb_string'] (http://www.php.net/manual/en/book.mbstring.php) Attribute festlegen. – Martin

+1

*** bearbeiten *** Ihre Frage, nicht Code in Kommentaren schreiben es ist ziemlich unlesbar. Prost – Martin

+0

Ich habe den Eröffnungsbeitrag aktualisiert. – Sportline83

Antwort

0

gelöst! Ich habe den Hinweis von einem anderen nicht aus diesen Foren zu this stackoverflow Beitrag über die Einstellung eines User-Agent zu bekommen. Nach etwas mehr Forschung fand ich, dass this Antwort die Lösung für mein Problem war. Jetzt funktioniert alles gut!