Zend_Layout UTF-8 gibi içerik kodlama için görünmüyor

3 Cevap php

Ben Zend Framework 1.9 MVC işlevini kullanıyorum, ve Zend_Layout bu pozisyonda ayarlanmış olmasına rağmen, UTF-8 kullanarak görünümü içeriği kodlama görünmüyor.

Düzeni script aşağıda gösterilmiştir.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<?php echo $this->headTitle(); ?>
    	<?php echo $this->headMeta(); ?>
    	<?php echo $this->headLink(); ?>
    	<?php echo $this->headScript(); ?>
    </head>
    <body>
    	<p>£ $ &pound;</p>
    	<?php echo $this->layout()->content;  ?>
    </body>
</html>

Œkod aşağıda bulabilirsiniz.

<p>£ $ &pound;</p>

Düzeninde, Pound sembolü beklediğiniz gibi çıktılar, ama bu gerçek görünümü içinde işlemez.

Ben düzeni ve sadece çıkış görünümü kaldırırsanız, bunun iyi geliyor. Ben bu-> düzeni () $ koyarsanız Ayrıca - utf8_encode içeride> içerik hepsi züppe çalışır.

Ben sadece Zend Framework IN bu sorunu gidermek için bir yol olup olmadığını bilmek istiyorum.

3 Cevap

Varsayılan olarak, Views ISO-8859-1 kodlanmış ve UTF-8 edilir; belki bu sorun için nedenidir.

Sen Deep End Survive bu bölümde daha fazla açıklama ve bir örnek bulacaksınız: 5.4. Step 3: Implement Application Bootstrapping - bu biraz uzun, ama bazı şeyler orada size yardımcı olabilir ...

İşte o sayfa bir alıntı:

At present, Zend_View, in stark contrast to other components, uses a default character set of ISO-8859-1 (as do View Helpers) which simply won't do if you are going to output multibyte characters

Ve ayrıca:

To change the default, we should instantiate a new instance of Zend_View, set a more appropriate default character encoding of UTF-8, and implant this altered View object into the ViewRenderer Action Helper.

. Ve başka bir yol ini yapılandırma dosyasını kullanarak, orada, bir sonraki bölümde açıklanmıştır; Özellikle, bölüm 6.5. Step 4: Handling Setting Of Standard Component Defaults.

Mizanpajınızdan dosya kodlama ve görünüm dosyası nedir? Ikisi de UTF-8 ile kodlanmış olduğundan emin olun. Ben kuvvetle görünüm dosyası ile (bir <p>£ $ &pound;</p>) UTF-8 kodlanmış olmadığını sanıyorum.

Eğer açıklanan davranışı görmek nedeni sadece görüntülerken düzenini kullanarak ve diğer bazı kodlama (büyük olasılıkla ISO-8859-x) ne zaman tarayıcı guesses kullanılan kodlama ve UTF-8 için açık olduğunu œkod.

Bu kodlama kullanıldığı üzerinde iyi bir ipucu ile tarayıcı vermelidir. Bir seçenek plandaki <head>-bölümünde meta http-equiv etiketini kullanan, diğeri bir HTTP başlığını (Content-type: text/html; charset=utf8) kuruyor Cevabınızı nesne üzerinde.

Lütfen bootstrap bunu.

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

Ben genellikle benim bootstrap Bu fonksiyonu kullanmak

protected function _initDoctype()
{
$this->bootstrap('view');
    $view = $this->getResource('view');

    $view->addHelperPath(.....);
    $view->addHelperPath(.....);

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

}

Alternatif olarak:

Lütfen düzeni dosyasında

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Ve tüm at () echo $ this-> headmeta yok.