2013-01-21 34 views
5

Vì một số lý do, khi chạy mb_convert_encoding trong phpunit, tôi nhận được kết quả không mong muốn. Ví dụ cách làm như sau:mb_convert_encoding() không hoạt động với phpunit

var_dump(mb_convert_encoding(utf8_decode('ö'), 'UTF-8') === 'ö')

Các lợi nhuận trên bool (true) dưới PHP-FPM, và PHP-CLI, tuy nhiên dưới PHPUnit trả về false, mb_convert_encoding() đang làm một cái gì đó, nó chỉ mã hóa cho một chuỗi sai lầm.

+2

Có thể phpunit sử dụng php.ini khác nhau, trong đó phần mở rộng php_mbstring không được bật? – jasir

+0

@mins mở rộng 'mbstring' được tải, như tôi đã nói - mb_convert_encoding trả về _something_ it; s chỉ sai! –

+1

Mã 'test.php' của bạn có được mã hóa bằng UTF-8 không có BOM không? –

Trả lời

1

Tôi đoán bạn đang sử dụng một tập hợp các cài đặt in mbstring khác. Đây là một cách để khắc phục sự cố đó. Đầu tiên trong cli bạn có thể chạy php -i |grep -i "mb" để xem chúng.

Sau đó, tạo một thử nghiệm phpunit xác nhận các giá trị đều giống nhau. Đây là mỏ (Tôi chỉ làm các nghi phạm có khả năng):

class MbStringTest extends PHPUnit_Framework_TestCase{ 

function test1(){ 
$this->assertEquals('UTF-8', ini_get('mbstring.internal_encoding')); 
$this->assertEquals(0, ini_get('mbstring.encoding_translation')); 
$this->assertEquals('', ini_get('mbstring.detect_order')); 
$this->assertEquals(0, ini_get('mbstring.strict_detection')); 

$s='ö'; 
$this->assertEquals($s,mb_convert_encoding(utf8_decode($s), 'UTF-8' , 'ISO-8859-1')); 
} 

} 

Ngoài: tôi có thể không nhận được mã của bạn để làm việc. Tôi cần phải nói rằng mã hóa nguồn là ISO-8859-1. I E. tự động phát hiện của bộ ký tự đầu vào đã nhận nó sai. Nếu bạn chỉ đang tìm kiếm bản sửa lỗi nhanh và không quan tâm đến lý do, hãy thêm thông số thứ 3 đó một cách rõ ràng vào mb_convert_encoding có thể là tất cả những gì bạn cần.

0

Có thể không phải là câu trả lời nhưng tôi nghĩ cần đính kèm hình ảnh tại đây;

Tôi muốn chỉ ra cách thay đổi các trang chứa unicode của bạn thành mã hóa thích hợp bằng trình chỉnh sửa mã. Tôi làm điều đó với Notepad ++ như vậy, nhưng bạn cần phải kiểm tra tùy chọn mã hóa trình chỉnh sửa của mình.

Notepad++ encoding options

Trong khi đó, tôi muốn muốn trở thành một chuyên gia về khoa học máy tính nhưng tôi không :). Đó là một gợi ý rằng làm thế nào tôi giải quyết vấn đề unicode về phía tôi, Trước tiên tôi thử "Convert to UTF-8", nếu không hoạt động, sau đó "Convert to UTF-8 without BOM" và tùy chọn này đã từng giải quyết vấn đề trong quá khứ. Nhưng nếu bạn thắc mắc về BOM, hãy kiểm tra tại đây: http://en.wikipedia.org/wiki/Byte_order_mark

+0

Tệp của tôi chắc chắn là UTF-8 vì điều này đang hoạt động trên cả PHP-CLI và PHP-FPM –

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