Invision Community 4: SEO, prepare for v5 and dormant account notifications By Matt Monday at 02:04 PM
Daniel Wolf Posted October 29, 2018 Posted October 29, 2018 Hi, I am using the REST-API to create members on demand. It is kind of a data-transfer from another community-database. Everything is working fine, until I get an user with a special char in it's name - let's say "Gérome". The API creates a user called "G", everything starting from the special char is truncated. If I understood correctly, the function "http_build_query" should encode the data accordingly. Manually creating an user with this name works as expected. Anyone having an idea what is missing here? $querydata = array( 'name' => 'Gérome', 'password' => 'test123', ); $curl = curl_init( $communityUrl . 'api' . $endpoint ); curl_setopt_array( $curl, array( CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_POST => 1, CURLOPT_HTTPAUTH => CURLAUTH_BASIC, CURLOPT_POSTFIELDS => http_build_query($querydata), CURLOPT_USERPWD => "{$apiKey}:" ) ); $response = curl_exec( $curl ); best regards, Dany
bfarber Posted October 30, 2018 Posted October 30, 2018 http_build_query turns that into name=G%C3%A9rome&password=test123 which appears to be correct on the surface. I cannot see any problem on the surface, and indeed my test worked just fine: <?php $apiKey = '__masked__'; require 'init.php'; \IPS\Dispatcher\External::i(); $response = \IPS\Http\Url::external( \IPS\Settings::i()->base_url . '/api/index.php?/core/members' ) ->request() ->login( $apiKey, '' ) ->post( array( 'name' => 'Gérome', 'password' => 'test123', 'email' => 'gerome@test.com' ) ) ->decodeJson(); var_dump($response); exit; I've verified that our CURL class essentially just does the same thing (runs the values through http_build_query) to format the values. What encoding is your core_members database table, and the 'name' column in it? Perhaps it's utf8 but needs to be utf8mb4?
Daniel Wolf Posted October 31, 2018 Author Posted October 31, 2018 Hi, thank you for taking time to answer my question. First of all it's good news that my approach is not completely wrong. 😉 The database encoding is "utf8mb4_unicode_ci", i just checked: The column "name" of the members-table has the same encoding. As fas as I know I got the recommendation for this encoding from one of your support-topics. I will investigate further. best regards, Dany
bfarber Posted October 31, 2018 Posted October 31, 2018 Yes, in applications/core/api/members.php I would recommend outputting the incoming request data to see what you're getting.
Recommended Posts
Archived
This topic is now archived and is closed to further replies.