2013-04-14 23 views
17

Le cuciture devono essere come lo sprintf hanno un problema con i personaggi foregin? O sono io che sto facendo qualcosa di sbagliato? Sembra che funzioni quando si rimuovono caratteri come åäö dalla stringa. Dovrebbe essere necessario?php sprintf() con caratteri stranieri?

voglio le seguenti righe da allineare correttamente per un rapporto:

2011-11-27 A1823 -Ref. Leif -   12 873,00 18.98 
2011-11-30 A1856 -Rättat xx -   6 594,00 19.18 

sto usando sprintf() in questo modo: % -12s% -8s -% - 10s -% 20s% 8.2 f

utilizzando: php-5.3.23-NTS-Win32 VC9-x86

+0

Questo problema (che diversi personaggi sono composti da un diverso numero di byte e cluster diversi grafema sono costituiti da un diverso numero di caratteri) è * un po '* simile (ma non lo stesso) http: //stackoverflow.com/questions/9166698/aligning-based-on-the-width-of-letters-with-sprintf. La linea di fondo è che potrebbe essere più semplice inserire i dati in una tabella HTML. – PleaseStand

+1

Sì, questo non è sicuramente un duplicato, questa domanda riguarda i caratteri multibyte è sprintf(), l'altra riguarda le larghezze di visualizzazione dei font. – xyphoid

+3

Questa non era una domanda duplicata ... Puoi fare il trucco facendo: utf8_encode (sprintf ('format', utf8_decode ($ yourstring)) ... Ovviamente dovrai controllare tutti gli argomenti se molti –

risposta

8

stringhe in PHP sono fondamentalmente array di byte (non caratteri). Non possono funzionare in modo nativo con codifiche multibyte (come UTF-8).

Per i dettagli si veda:
https://secure.php.net/manual/en/language.types.string.php#language.types.string.details

La maggior parte delle funzioni di stringa in PHP hanno equivalenti multibyte però (con il prefisso mb_). Ma lo sprintf no.

C'è un commento utente (da "webmaster at cafe-clope dot net") con implementazione multibyte di sprintf nella pagina di documentazione della funzione su php.net. Può funzionare per voi:
https://secure.php.net/manual/en/function.sprintf.php#55837