Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: tradurre con php

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    tradurre con php

    ciao a tutti! mi potete dire come posso tradurre un testo utilizzando php? ho seguito questa guida ma a me non va http://www.gennarovarriale.it/funzio...le-translator/

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    "non va" non vuol dire niente.
    Ricevi un errore? Quale?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    schermata bianca... per questo sono un pò vago.. a voi funziona?

  4. #4
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Ciao, io per testare l'esempio che hai postato tu ho utilizzato questo codice

    Codice PHP:
    <?php
    function postURL$url ,$params) {
     
    $buffer='';
     
    $url_parsed parse_url($url);
     
    $host $url_parsed["host"];
     
    $port $url_parsed["port"];
     if (
    $port==0$port 80;
     
    $path $url_parsed["path"];
     
    $ContentLength strlen($params);
     
    $out "POST $path HTTP/1.0\r\n".
     
    "Host: $host\r\n".
     
    "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5\r\n".
     
    "Content-Type: application/x-www-form-urlencoded\r\n".
     
    "Content-Length: $ContentLength\n\n".
     
    "$params\n";
     
    $fp fsockopen($host$port$errno$errstr30);
     
    fwrite($fp$out);
     while (!
    feof($fp)) {
     
    $buffer.= fgets($fp128);
     }
     
    fclose($fp);
     return 
    $buffer;
    }

    function 
    traduci ($testo,$src,$dest) {
     
    /* var riale:gennaro; */ 
     
    $tag='JHIKE';
     
    $testo=urlencode($tag.$testo.$tag);
     
    $params="langpair=$src|$dest&text=".$testo;
     
    $datapostURL('http://translate.google.com/translate_t'$params);
     
    preg_match_all("/result_box.*".$tag."(.*)".$tag."\s*\<\/div\>/mi"$data$resultPREG_SET_ORDER);
     return  
    $result[0][1];
    }

    echo 
    traduci ('la penna è sul tavolo rosso','it','en');
    ?>
    Ma ricevo questi errori, non pagina bianca...

    Notice: Undefined index: port in C:\Programmi\EasyPHP5.3.0\www\prova.php on line 6

    Notice: Undefined offset: 0 in C:\Programmi\EasyPHP5.3.0\www\prova.php on line 32

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Dalla funzione traduci() invece di $result, fatti ritornare $data e stampala con
    echo "<pre>";
    print_r(traduci(.....));
    echo "</pre>";

    è probabile che lo script sia vecchio e da allora Google abbia cambiato il layout della risposta, quindi l'espressione regolare non trova un match.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    ho provato come mi avete detto ma mi dice:
    codice:
    Warning:  preg_match_all() [function.preg-match-all]: Unknown modifier 'd' in lingua.php on line 31

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    La d nell'espressione regolare da dove salta fuori? Come modificatori ci sono "mi" nello script.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    ho scritto
    Codice PHP:
    <?php
    function postURL$url ,$params) {
     
    $buffer='';
     
    $url_parsed parse_url($url);
     
    $host $url_parsed["host"];
     
    $port $url_parsed["port"];
     if (
    $port==0$port 80;
     
    $path $url_parsed["path"];
     
    $ContentLength strlen($params);
     
    $out "POST $path HTTP/1.0\r\n".
     
    "Host: $host\r\n".
     
    "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.5) Gecko/20070713 Firefox/2.0.0.5\r\n".
     
    "Content-Type: application/x-www-form-urlencoded\r\n".
     
    "Content-Length: $ContentLength\n\n".
     
    "$params\n";
     
    $fp fsockopen($host$port$errno$errstr30);
     
    fwrite($fp$out);
     while (!
    feof($fp)) {
     
    $buffer.= fgets($fp128);
     }
     
    fclose($fp);
     return 
    $buffer;
    }

    function 
    traduci ($testo,$src,$dest) {
     
    /* var riale:gennaro; */ 
     
    $tag='JHIKE';
     
    $testo=urlencode($tag.$testo.$tag);
     
    $params="langpair=$src|$dest&text=".$testo;
     
    $datapostURL('http://translate.google.com/translate_t'$params);
     
    preg_match_all("/result_box.*".$tag."(.*)".$tag."s*</div>/mi"$data$resultPREG_SET_ORDER);
     return  
    $data;
    }

    echo 
    "<pre>";
    print_r(traduci ('la penna è sul tavolo rosso','it','en'));
    echo 
    "</pre>";
    //echo traduci ('la penna è sul tavolo rosso','it','en');
    ?>
    nel complesso funziona comunque... ma è possibile farsi ritornare solo la traduzione?

  9. #9
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    $result dovrebbe ritornare solo la traduzione, ma evidentemente la preg_match_all non trova corrispondenze perché la stringa che ritorna google è cambiata e la regola dell'espressione regolare non va più bene.

    Dovresti crearti una nuova regola per la preg_match_all() guardando ciò che ti restituisce la print_r(), per questo te l'ho fatta stampare.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    sto riprendendo le espressioni regolari... mi potresti dare una mano?
    praticamente la regola è che il testo è contenuto tra il testo JHIKE e JHIKE.
    ho provato con l'explode ma non so perchè non va

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.