Originariamente inviato da AbbiWeb
UTF-8.

Giacché ci sono ti chiedo un altro parere: secondo te è bene cercare di memorizzare nel database le lettere accentate così come sono per poi convertirle nelle rispettive entità HTML con htmlspecialchars() o htmlentities(), oppure pensi sia meglio convertire subito prima della memorizzazione in modo da conservare le entità HTML sul DB?

Per adesso ho implementato nel primo modo, ed in locale funziona benissimo; nel DB ho tutte lettere accentate, le prelevo e le codifico in entità HTML. Tutto funziona alla perfezione, ma sul server remoto dove sto testando il sito sembrano esserci problemi con codifica/decodifica...
ecco, la cosa cambia considerevolmente: usando UTF-8, che da php non è nativamente gestito, i caratteri accentati sono composti in realtà da due byte che per php sono due ben distinti caratteri a se stanti

anche usando htmlentities o htmlspecialchars, se non specifici il charset, avrai problemi, probabilmente maggiori, perché convertiranno le varie parti del carattere in entità a se stanti.

il primo modo funziona perché converti da UTF-8 ad ASCII

prova con
codice:
static function encodeTitle($title) {
    $encoded = strtr(utf8_decode($title), array(' ' => '-', 'à' => 'a', 'è' => 'e', 'é' => 'e', 'ì' => 'i', 'ò' => 'o', 'ù' => 'u'));
    $encoded = preg_replace('#[^a-z0-9-]#i', '', $encoded);
    $encoded = strtolower($encoded);
    return $encoded;
}
sul sito remoto, sembrano esserci problemi di codifica, perché non la gestisci correttamente

ad esempio: dove specifichi che la connessione è di tipo UTF-8? altra domanda la imposti nella connessione al database? o ancora ... effettui operazioni sulle stringhe ricevute dal browser (operazioni di qualsiasi genere come ad es conversione a caratteri maiuscoli o minuscoli, tagli, lettura di spezzoni e cosi via)?