2013-04-14 24 views
17

Đường nối giống như sprintf có vấn đề với ký tự foregin? Hay là tôi làm điều gì đó sai? Có vẻ như nó hoạt động khi loại bỏ các ký tự như åäö từ chuỗi mặc dù. Điều đó có cần thiết không?php sprintf() với các ký tự nước ngoài?

Tôi muốn các dòng sau vào được sắp xếp một cách chính xác cho một báo cáo:

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

Tôi đang sử dụng sprintf() như thế này: % -12s% -8s -% - 10s - 20s%% 8.2 f

Sử dụng: php-5.3.23-nts-Win32-VC9-x86

+0

Vấn đề này (các ký tự khác nhau bao gồm số lượng byte khác nhau và các cụm đồ thị khác nhau bao gồm số ký tự khác nhau) * hơi giống * (nhưng không giống như) http: //stackoverflow.com/questions/9166698/aligning-based-on-the-width-of-letters-with-sprintf. Điểm mấu chốt là có thể dễ dàng nhất để đưa dữ liệu vào bảng HTML thay thế. – PleaseStand

+1

Vâng điều này chắc chắn không phải là một bản sao, câu hỏi này là về các ký tự nhiều byte là sprintf(), một trong những khác là về độ rộng hiển thị phông chữ. – xyphoid

+3

Đây không phải là một câu hỏi trùng lặp ở tất cả ... Bạn có thể làm các trick bằng cách làm: utf8_encode (sprintf ('format', utf8_decode ($ string)); ... Tất nhiên bạn sẽ phải kiểm tra mọi đối số nếu nhiều –

Trả lời

8

Strings trong PHP được về cơ bản các mảng byte (không ký tự). Chúng không thể hoạt động nguyên bản với các bảng mã nhiều byte (như UTF-8).

Để biết chi tiết xem:
https://secure.php.net/manual/en/language.types.string.php#language.types.string.details

Hầu hết các chức năng chuỗi trong PHP có nhiều byte tương đương mặc dù (với tiền tố mb_). Nhưng sprintf thì không.

Có một nhận xét của người dùng (bởi "quản trị viên web tại quán cà phê-clope dot net") với việc triển khai multibyte của sprintf trên trang tài liệu của hàm tại php.net. Nó có thể phù hợp với bạn:
https://secure.php.net/manual/en/function.sprintf.php#55837

Các vấn đề liên quan