2013-04-14 15 views
17

Nähte wie sprintf haben ein Problem mit Vorzeichen? Oder mache ich etwas falsch? Sieht so aus, als würde es beim Entfernen von Zeichen wie åäö aus der Zeichenfolge funktionieren. Sollte das notwendig sein?php sprintf() mit fremden Zeichen?

Ich möchte die folgenden Zeilen richtig für einen Bericht ausgerichtet werden:

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

Ich bin mit sprintf() wie folgt aus: % -12s% -8s -% - 10s -% 20s% 8.2 f

Verwendung: PHP-5.3.23-NTS-Win32-VC9-x86

+0

dieses Problem (das unterschiedliche Zeichen bestehen aus einer unterschiedlichen Anzahl von Bytes und verschiedenen Graphem-Cluster bestehen aus einer unterschiedlichen Anzahl von Zeichen) ist * etwas * ähnlich wie (aber nicht das gleiche wie) http: //stackoverflow.com/questions/9166698/aligning-based-on-the-width-of-letters-with-sprintf. Die Quintessenz ist, dass es am einfachsten ist, die Daten stattdessen in eine HTML-Tabelle zu stellen. – PleaseStand

+1

Ja, das ist definitiv kein Duplikat, diese Frage bezieht sich auf Multibyte-Zeichen sprintf(), die andere geht es um Schriftbreite. – xyphoid

+3

Das war keine doppelte Frage ... Sie können den Trick machen, indem Sie tun: utf8_encode (sprintf ('format', utf8_decode ($ yestring)); ... Natürlich müssen Sie alle Argumente überprüfen, wenn viele –

Antwort

8

Strings in PHP, sind grundsätzlich Arrays von Bytes (nicht Zeichen). Sie können nicht nativ mit Multibyte-Kodierungen (wie UTF-8) arbeiten. siehe

Einzelheiten:
https://secure.php.net/manual/en/language.types.string.php#language.types.string.details

meisten String-Funktionen in PHP obwohl multibyte gleichwertig (mit dem mb_ Präfix). Aber die sprintf nicht.

Es gibt einen Benutzerkommentar (von "webmaster at cafe-clope dot net") mit Multibyte-Implementierung des sprintf auf der Dokumentationsseite der Funktion bei php.net. Es kann für Sie arbeiten:
https://secure.php.net/manual/en/function.sprintf.php#55837