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.
Nguồn
2013-01-22 09:53:41
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
@mins mở rộng 'mbstring' được tải, như tôi đã nói - mb_convert_encoding trả về _something_ it; s chỉ sai! –
Mã 'test.php' của bạn có được mã hóa bằng UTF-8 không có BOM không? –