Ho (in un database SQLite) la seguente stringa:PHP: È possibile SUBSTR correttamente una stringa UTF-8?
Лампа в вытяжке на кухне меняется, начиная с вытаскивания белого штырька справа.
La stringa viene correttamente visualizzato da PHP utilizzando print
. Vorrei ottenere solo i primi 50 caratteri di questa stringa, ovvero
Лампа в вытяжке на кухне меняется, начиная с вытас
.
Ho provato con sia il substr e mb_substr, e ottenere
Лампа в вытяжке на кухне ме�
, cioè solo 28 caratteri.
Dopo aver letto qui e altrove i problemi di mbstring, mi rendo conto che questa è in realtà una stringa da 50 byte (22 caratteri russi = 44 byte più 5 spazi più 1 simbolo domanda).
C'è qualche buona soluzione a questo? Tutte le mie stringhe sono UTF-8, quindi potrei ovviamente programmare io stesso una sottostringa, controllando il primo bit di ogni byte ecc. Ma questo dovrebbe sicuramente essere stato fatto prima, giusto?
AGGIORNAMENTO: Credo che mb_substr
non funzioni correttamente perché mb_detect_encoding()
does not work properly.
Si dice di aver provato 'mb_substr', ma si è tentato di specificare la codifica? Ad esempio, 'mb_substr ($ stringa, 0, 10," UTF-8 ")' funziona? – h2ooooooo
Assicurati di passare la codifica corretta a 'mb_substr' -' mb_substr ($ input, 0, 50, 'UTF-8') 'funziona per me,' mb_substr ($ input, 0, 50) 'no. – DCoder
@ h2ooooooo: non ce l'ho, l'ho perso nel manuale. E lo fa. Per favore aggiungi il tuo commento come risposta, lo accetterò. – texnic