<?php

/**
 * Test case for PEAR Bug #13145
 *
 * Make sure (ini_get(mb_string.func_overload) & 2) == 2 for this test to fail.
 */

require_once 'XML/RPC2/Server.php';

class 
MyServer
{
    
/**
     * @xmlrpc.hidden
     */
    
public function __construct()
    {
        
XML_RPC2_Server::create($this, array('encoding' => 'utf-8'));
    }

    
/**
     * Returns a response string containing multibyte characters
     *
     * @return string
     */
    
public function multibyteResponse()
    {
        
// Hello, World! in utf-8 encoded curly quotes
        
return "\xE2\x80\x9CHello, World!\xE2\x80\x9D";
    }
}

$server = new Server();

/**
 * Now make a simple XML-RPC request on the server
 */

$content = <<<XML
<methodCall>
    <methodName>multibyteResponse</methodName>
    <params>
        <param>
            <value>
                <string></string>
            </value>
        </param>
    </params>
</methodCall>

XML;

$curl curl_init();
curl_setopt_array($curl, array(
    
CURLOPT_URL        => 'http://myserver.com/xml-rpc/',
    
CURLOPT_POST       => true,
    
CURLOPT_POSTFIELDS => $content
));

curl_exec($curl);

echo 
"Content-length header is: ",
    
curl_getinfo($curlCURLINFO_CONTENT_LENGTH_DOWNLOAD),
    
" (bytes)\n";

curl_close($curl);

/**
 * Expected result:
 *    Content-length header is: 19 (bytes)
 *
 * Result with (mb_string.func_overload & 2) == 2
 *    Content-length header is 15 (bytes)
 */

?>