2016-03-07 18 views
9

Tại sao điều này trả về các ký tự utf8 trên một máy chủ nhưng không trả về một máy chủ khác? Một số tên tập tin chứa ký tự unicode như æøå ..opendir và readdir trả về utf8

Trong một số môi trường utf8 chars được in và trong một số ký tự iso được in

header('content-type: text/plain'); 
$handle = opendir("./dir"); 
while($readdir = readdir($handle)){ 
    echo "$readdir\n"; 
} 

đầu ra Content-Type:text/plain;charset=UTF-8

Retursvar 2 med fejl p� debiteringsniveau.xml 
Retursvar 2 med fejl på debiteringsniveau.xml 

Các miền địa phương cùng là được cài đặt trên cả hai hệ thống (UTF8)

dpkg-reconfigure locales 
+0

gì hệ thống tập tin cơ bản đang được sử dụng? Có phải hệ thống tập tin giống nhau đang được sử dụng trên các máy chủ trả lại các kết quả khác nhau không? –

+0

Tất cả các hệ thống đều là Debian Jessie - cùng một bản phân phối – clarkk

+0

Ok, câu hỏi tiếp theo - cách bạn đặt Loại nội dung. Tôi giả sử bạn đang chạy qua máy chủ web và xem trong trình duyệt? Loại nội dung được đặt thông qua 'tiêu đề()' hay html nội tuyến ?? –

Trả lời

0

Đây không phải là câu hỏi PHP, đó là câu hỏi hệ thống. Sự cố có thể xuất phát từ các miền địa phương được định cấu hình sai trên một trong các hệ thống. Nếu bạn chạy locale, bạn có thể kiểm tra xem ngôn ngữ nào hiện được cài đặt. Nếu ngôn ngữ không được đánh dấu là UTF-8, đây sẽ là vấn đề của bạn. Cài đặt đúng miền địa phương UTF-8 sẽ khắc phục sự cố.

+0

Cùng một ngôn ngữ chính xác được cài đặt trên cả hai hệ thống. Cả hai UTF8 – clarkk

2

Bạn có thể thấy rằng máy chủ web đang chạy dưới một miền địa phương khác trên mỗi hệ thống.

Để xác định điều này chạy php sau qua webserver của bạn:

<?php 
system("locale"); 

Rất có thể các máy chủ web trở về các nhân vật đúng đang chạy trong hoặc là một 'utf8' locale hoặc 'C'.

Miền địa phương mà máy chủ web sử dụng có thể được đặt ở các vị trí khác nhau. Hoặc bằng cách sử dụng ngôn ngữ hệ thống rộng - hoặc một dịch vụ cụ thể. Bạn có thể cần phải điều tra lý do cho bất kỳ sự khác biệt nào và quyết định có nên cập nhật miền địa phương của hệ thống của bạn hay chỉ là máy chủ web.

trên Debian, hệ thống thay đổi locale rộng được thay đổi sử dụng

dpkg-reconfigure locales 

Và sau khi nhắc nhở.

Ngoài ra, đối với các miền địa phương cụ thể của dịch vụ. Đặt biến môi trường 'LANG' thành biến bạn yêu cầu trong tập lệnh init dịch vụ trước khi bắt đầu dịch vụ. Có lẽ một tập tin cấu hình cụ thể dịch vụ bạn cũng có thể tìm kiếm để duy trì sự thay đổi trong trường hợp nâng cấp máy chủ web.

+0

Địa điểm chính xác giống nhau được cài đặt trên cả hai hệ thống .. Cả hai UTF8 – clarkk

+0

Để làm rõ - miền địa phương của hệ thống có thể khác với địa chỉ webserver hoặc bất kỳ quy trình nào khác chạy dưới. Bạn đã sử dụng phương pháp nào để xác định rằng cả hai máy chủ web đang chạy dưới dạng UTF-8? –

-1

Cố gắng thiết lập utf-8 mã hóa trong tiêu đề của bạn:

header('content-type: text/plain; charset:utf-8'); 
Các vấn đề liên quan