Я пишу плагин перевода jQuery. Моя первая итерация передала массив строк для перевода. Хотя это сработало хорошо, это было ужасно медленно. Я модифицировал плагин, чтобы передать одно слово за раз. Обе процедуры используют ajax для вызова функции PHP Translate, показанной ниже. Я проверил, чтобы убедиться, что вызовы ajax работают и правильно передают слова. Я также проверял ответы, связанные с предупреждениями, безрезультатно.Почему я получаю эти PHP Предупреждение: simplexml_load_string
После того, как первое слово переведено, я получаю следующие сообщения, которые повторяются для каждого слова. Я также получаю пару ошибок curl, жалующихся, что не смог подключиться к хосту (Translate-Exception: curl = не удалось подключиться к хосту) после многочисленных предупреждений.
Предупреждения
Startseite (первое слово переводится правильно)
Предупреждение: simplexml_load_string() [function.simplexml нагрузки строка]: Entity: строка 1: анализатор ошибок: Space требуется после публичного идентификатора в D: \ hshome \ c287577 \ test.bunkerhill.com \ php \ translate.php в строке 170
Предупреждение: simplexml_load_string() [function.simplexml-load-string]: http: // www.w3.org/TR/html4/str in D: \ hshome \ c287577 \ tes t.bunkerhill.com \ php \ translate.php в строке 170
Предупреждение: simplexml_load_string() [function.simplexml-load-string]:^в D: \ hshome \ c287577 \ test.bunkerhill.com \ php \ translate.php on line 170
Предупреждение: simplexml_load_string() [function.simplexml-load-string]: Entity: строка 3: ошибка парсера: несоответствие открытия и окончания тегов: строка 3 META и HEAD в D: \ hshome \ c287577 \ test.bunkerhill.com \ php \ translate.php в строке 170
Предупреждение: simplexml_load_string() [function.simplexml-load-string]: в D: \ hshome \ c287577 \ test.bunkerhill.com \ php \ translate.php в строке 170
PHP
public function Translate() {
try {
if (!empty($_POST['text']))
$text = $_POST['text'];
else
throw new RuntimeException('Programmer Error: text to translate not found or is empty!');
$auth = new AccessTokenAuthentication();
$authHeader=$auth->authenticate();
$fromLanguage = empty($_POST['fromLang']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : $_POST['fromLang'];
$toLanguage = empty($_POST['toLang']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : $_POST['toLang'];
$contentType = 'text/plain';
$category = 'general';
//Create the Translator Object.
$translatorObj = new HTTPTranslator();
//$translated = array();
//foreach ($elements as $element) {
$params = "text=".$text."&to=".$toLanguage."&from=".$fromLanguage;
$translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?$params";
//Get the curlResponse.
$curlResponse = $translatorObj->curlRequest($translateUrl, $authHeader);
//Interprets a string of XML into an object.
$xmlObj = simplexml_load_string($curlResponse);
echo $xmlObj[0];
/* unset($translatorObj);
foreach((array)$xmlObj[0] as $val){
array_push($translated, $val);
}
} end-foreach
echo json_encode($translated);
*/
}
catch (Exception $e) {
echo "Translate-Exception: " . $e->getMessage() . PHP_EOL;
}
}
CURL КОД
function curlRequest($url, $authHeader, $postData='')
{
//Initialize the Curl Session.
$ch = curl_init();
//Set the Curl url.
curl_setopt ($ch, CURLOPT_URL, $url);
//Set the HTTP HEADER Fields.
curl_setopt ($ch, CURLOPT_HTTPHEADER, array($authHeader,"Content-Type: text/xml"));
//CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec().
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
//CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate.
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, False);
if($postData) {
//Set HTTP POST Request.
curl_setopt($ch, CURLOPT_POST, TRUE);
//Set data to POST in HTTP "POST" Operation.
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
}
//Execute the cURL session.
$curlResponse = curl_exec($ch);
//Get the Error Code returned by Curl.
$curlErrno = curl_errno($ch);
if ($curlErrno) {
$curlError = curl_error($ch);
throw new Exception('curl='.$curlError);
}
//Close a cURL session.
curl_close($ch);
if (trim($curlResponse)=='') echo 'c-ressp='.$curlResponse;
return $curlResponse;
}
Кажется, что есть какое-то хронометраж вопроса, но я не могу идентифицировать. Надеюсь, кто-то там испытал подобную проблему и может пролить свет на эту болезненную ситуацию.
Thanks Jay. Как ты это сделал? –
Jay - волшебник;) На самом деле в редакторе есть кнопка blockquote. –
use @simplexml_load_string ($ curlResponse) вместо: p – webzar