2010-02-01 25 views
9

Hy vọng đây là một số kiến ​​thức về khung công tác Zend hơn tôi, tôi đã cố tìm kiếm câu trả lời nhưng tôi không thể làm bất cứ điều gì ở bất cứ đâu.Vấn đề với Zend Framework và UTF-8 ký tự (æøå)

Vấn đề:

Khi thêm nội dung của một Zend_Form cơ sở dữ liệu với việc sử dụng các nhân vật Zend_Db æ ø å được thay thế bằng øÃ|à ¥

Hệ thống

  • WampServer 2.0i
    • Apache 2. 2.11
    • MySQL 5.1.36
    • PHP 5.3.0
  • Zend Framework 1.10.0

Modifications thực hiện để làm cho nó hoạt động (mà nó không)

application.ini

resources.db.adapter = "pdo_mysql" 
resources.db.params.host = "localhost" 
resources.db.params.username = "//Brukernavn//" 
resources.db.params.password = "//Passord//" 
resources.db.params.dbname = "//Database//" 
resources.db.params.charset = "utf8" 
resources.db.params.driver_options.1002 = "SET NAMES utf8" 
resources.db.isDefaultTableAdapter = true 

Đối với tất cả các hình thức Tôi đã thêm

->setAttrib('accept-charset', 'utf-8'); 

Và trong Bootstrap.php tôi đã đặt đoạn mã sau:

$view->setEncoding('UTF-8'); 
$view->doctype('XHTML1_STRICT'); 
$view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8'); 

Cơ sở dữ liệu được thiết lập để utf8_general_ci

Bất cứ ai cũng có một mẹo về cách làm cho nó hoạt động?

soulution:

Đó là một lỗi trong PHP 5.3.0 và 5.3.1 (http://bugs.php.net/bug.php?id=47224 ) vì vậy tôi chọn để hạ xuống 5.2.11, và tất cả đã làm việc như một nét duyên dáng.

Nhờ Pekka và Greg K đã chỉ cho tôi đúng hướng.

Trả lời

3

Lắng nghe mô tả của bạn, dữ liệu khởi hành từ biểu mẫu dưới dạng UTF-8. Có thể là các bảng cơ sở dữ liệu của bạn tự vẫn là latin1?

+0

Tôi tin rằng cơ sở dữ liệu được đặt thành 'utf8_general_ci' –

+0

Oh yeah, overread that. Tuy nhiên, các bảng và các cột của chúng cũng cần phải là utf-8 (chỉ cần chuyển đổi db là không đủ). Nếu anh ta xác nhận các bảng và cột là UTF-8, tôi sẽ xóa câu trả lời này. –

+0

Cảm ơn câu trả lời của bạn. Thực ra tôi đã quên tự mình chuyển đổi các trường, nhưng không thay đổi hành vi sau khi làm như vậy. –

0

htmlentities sử dụng ($ val) để giá trị sản lượng mã hóa

+0

điều này không làm việc cho tôi bởi vì nó chỉ đơn giản là chuyển đổi các ký tự sai thành phiên bản thực thể html – Andrew

1

Giải pháp mà làm việc cho tôi:

Tất cả trong những điều cơ sở dữ liệu ở trên, cộng thêm các mã UTF-8 headMeta thẻ để bố trí.

Vì vậy, layout.phtml trông như thế này:

<?php echo $this->doctype() ?> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <?php echo $this->headMeta(); ?> <!-- This one does the trick! -->  
    </head> 
    <body> 
     <?php echo $this->layout()->content; ?> 
    </body> 
</html> 

Và Bootstrap.php như thế này:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    protected function _initDoctype() 
    { 
     $this->bootstrap('view'); 
     $view = $this->getResource('view'); 
     $view->setEncoding('UTF-8'); 
     $view->doctype('XHTML1_STRICT'); 
     $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8'); 
    } 

} 

Bây giờ các ký tự tiếng Thụy Điển như åäö hiển thị chính xác, và mặc dù không cố gắng, tôi nghĩ tiếng Trung Quốc hoặc bất cứ điều gì cũng sẽ tốt.

0

Vấn đề đối với tôi hóa ra là tôi có trang trí bằng cách sử dụng htmlentities() mặc định là ISO-8859-1 mã hóa nếu không được chỉ định, thay vì UTF-8 cho các phiên bản PHP> = 5.4.

0

tôi có cùng một vấn đề trong trang web của tôi, tôi giải quyết vấn đề này bằng cách thêm các charset trong file application.ini.

tại đây tôi thêm các mã sau đây.

resources.db.params.charset = "utf8" 
resources.db.params.driver_options.1002 = "SET NAMES utf8" 
resources.db.isDefaultTableAdapter = true