PHP: xml-rpc и турецкие символы - PullRequest
1 голос
/ 17 марта 2012

Я пытаюсь опубликовать на своем WordPress сайте по xml-rpc.

У меня две проблемы с турецкими буквами.

1 - Когда я использую один из этих символов (,ç, Ğğ, Iı, Öö, Şş, Üü) в заголовке отправляет сообщение в wordpress без заголовка .?

2 - И когда я использую одинаковые символы в содержании тела, он отправляется в другой форме.

Например, в содержании тела у меня есть " Ankaralıyım ", и слово переходит в wordpress как " Ankaralýyým ".

Вот код, который я использую

 <?php
$title="Karaçay";
$body="Ankaralıyım";

$rpcurl="http://localhost/wp/xmlrpc.php";
$username="admin";
$password="pass";
$categories="try";

echo wpPostXMLRPC($title,$body,$rpcurl,$username,$password,$categories,'');

function wpPostXMLRPC($title,$body,$rpcurl,$username,$password,$category,$keywords='',$encoding='UTF-8') 
{
    $title = htmlentities($title,ENT_NOQUOTES,$encoding);
    $keywords = htmlentities($keywords,ENT_NOQUOTES,$encoding);

    $content = array(
        'title'=>$title,
        'description'=>$body,
        'mt_allow_comments'=>0,  // 1 to allow comments
        'mt_allow_pings'=>0,  // 1 to allow trackbacks
        'post_type'=>'post',
        'mt_keywords'=>$keywords,
        'categories'=>array($category)
    );
    $params = array(0,$username,$password,$content,true);
    $request = xmlrpc_encode_request('metaWeblog.newPost',$params, array('encoding'=>'UTF-8'));
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
    curl_setopt($ch, CURLOPT_URL, $rpcurl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);
    $results = curl_exec($ch);
    curl_close($ch);
    return $results;
}

?>

У меня нет языковых проблем, когда я добавляю сообщение из WordPress.

Как я это исправлю?

И я попробовал то же самое с другим кодом, и на этот раз, если в заголовке или посте был какой-нибудь турецкий символ, я получил этот результат Ошибка при создании нового пост-32700: ошибка разбора. не хорошо сформирован Второй код

<?php
        require("class-IXR.php");  
        $client = new IXR_Client('http://localhost/wp/xmlrpc.php');

        $USER = 'admin';
        $PASS = 'pass';

        $content['title'] = 'Test title '.mt_rand();
        $content['categories'] = array("NewCategory","Nothing");
        $content['description'] = '<p>Lorem ırmak ipsum dolor sit amet</p>';
        $content['custom_fields'] = array( array('key' => 'my_custom_fied','value'=>'yes') );
        $content['mt_keywords'] = array('foo','bar');

        if (!$client->query('metaWeblog.newPost','', $USER,$PASS, $content, true))
        {
            die( 'Error while creating a new post' . $client->getErrorCode() ." : ". $client->getErrorMessage());  
        }
        $ID =  $client->getResponse();

        if($ID)
        {
            echo 'Post published with ID:#'.$ID;
        }

?>

Это был два разных способа отправки сообщения в WordPress по xml-rpc. Но главы, отличные от английского, не работают. То, что я знаю, есть поддержка utf-8 xml-rpc.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2012

Вы должны добавить escaping->markup параметр к xmlrpc_encode_request:

xmlrpc_encode_request('blogger.newPost',$params,
                            array('encoding'=>'UTF-8','escaping'=>'markup'));
0 голосов
/ 17 марта 2012

Это похоже на то, что какая-то часть конвейера не понимает или не соблюдает, что вы хотите использовать данные UTF-8.

Вы пробовали проверять необработанные данные, отправляемые на сервер, либо черезинструменты типа tcpdump , netcat или wireshark

Вы также можете попробовать включить отладку в curl с параметрами CURLOPT_VERBOSE и CURLOPT_HEADER :

curl_setopt($ch,CURLOPT_VERBOSE,1)
curl_setopt($ch,CURLOPT_HEADER,1)
...