Ok! Ce l'abbiam fatta (fatti una domanda e datti una risposta...) :P
Il problema derivava da htmlentities o htmlspecialchars (usati per stampare i sorgenti nella pagina) e l'encoding diverso tra il forum di altervista e il mio wordpress.
Quindi, per risolvere il problema "globalmente", mi toccava capire l'encoding di origine, e convertirlo - nel caso non lo fosse - in UTF-8, per poi aggiungere un
Codice PHP:
$body = curl_exec($cb);
preg_match('/charset=([^\s\n\r]+)/i',curl_getinfo($cb, CURLINFO_CONTENT_TYPE), $bodycharset);
$bodycharset['charset'] = isset($bodycharset[1]) ? $bodycharset[1] : '';
if(isset($bodycharset['charset']) && !empty($bodycharset['charset']) && $bodycharset['charset'] !== 'UTF-8')
{
$body = iconv($bodycharset['charset'], 'UTF-8', $body);
}
htmlspecialchars($string, ENT_COMPAT,'ISO-8859-1', true);
// http://php.net/manual/en/function.htmlspecialchars.php#112476
nello script (altrimenti specialchars stampa il nulla in caso di caratteri speciali.
Insomma, chiediamo a curl di consegnarci il tutto in UTF-8 (come da pagina che conterrà il codice), e poi - però - lo stampiamo nella pagina come ISO-8859-1 (altrimenti si rischia di non ritrovarsi nessun output).
Questo mi permette di vedere le accentate sia che richieda pagine UTF-8 (come il mio stesso blog), che ISO-* (come il forum di altervista), e persino di stampare il contenuto di un file binario (come un'immagine jpg)
Insomma, un po' contorto, ma sembra funzionare a dovere