Yii Framework Forum: مشکل Domdocument() و Utf8 در افزونه Ereadmore - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

مشکل Domdocument() و Utf8 در افزونه Ereadmore

#1 User is offline   m3hr@n 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 29-April 12

Posted 13 October 2012 - 08:17 AM


سلام دوستان؛
من از EReadMore برای ادامه مطلب توی پروژه ام استفاده کردم. اما انگار php توی مدل DOMDocument() یه مشکلی داره که utf8 رو صحیح نشون نمیده.
کسی راه حلی مناسب برای نمایش صحیح کاراکترهای utf8 در DOMDocument()داره؟
توی زبان فارسی و فرانسه و کلا یونیکد utf8 این مدل توی رندر کردن مشکل داره
این کد اکستنشن هست:


class EReadMore extends CWidget
{
    /** 
     * @var boolean show the 'Read more...' like link.
     */
    public $showLink = true;
    /** 
     * @var array link html options.
     * @since 1.0
     */
    public $linkHtmlOptions = array(); 
    /** 
     * @var string link label, default 'Read more...'.
     * @since 1.0
     */
    public $linkText = 'Read more...'; 
    /** 
     * @var string link url.
     * @since 1.0
     */
    public $linkUrl; 
    /** 
     * @var string the short version html.    
     * @since 1.0
     */
    public $short = ''; 
    /**
     * @var string tag name of the short verion root.
     * @since 1.0
     */
    public $root = 'div'; 
    /**
     * @var array html options of the short version root element.
     * @since 1.0
     */
    public $rootHtmlOptions = array('class'=>'content'); 
    /**
     * @var string nodename of the last html element rendered.
     * @since 1.0
     */
    public $nodeName = 'p';
    /**
     * @var boolean if short version will be returned or echoed.
     * @since 1.0
     */
    public $return = false; 
    /**
     * @var DOMDocument domdocument used to split the html.
     * @since 1.0
     */
    private $doc;
    public function init()
    {    
        ob_start();
        $this->doc = new DOMDocument();          
        parent::init();
    }
    public function run()
    {
        $html = ob_get_clean();
        $this->doc->loadHTML($html);
        $this->shortHtml();
        if($this->return)
            return $this->short;
        else
            echo $this->short;
    }
    private function shortHtml()
    {

        foreach($this->doc->getElementsByTagName('body') as $body)
        {
            $shortdom = new DOMDocument();
            $root = CHtml::tag($this->root, $this->rootHtmlOptions);
            $shortdom->loadHTML($root);
            
            foreach($body->childNodes as $node)
            {
               $newnode = $shortdom->importNode($node, true);
               $shortdom->documentElement->appendChild($newnode);
               if($node->nodeName == $this->nodeName)
                   break;
            }

            $this->short = $shortdom->saveHTML();
            if($this->showLink)
                    $this->short .= CHtml::link(Yii::t('layout',$this->linkText), $this->linkUrl, $this->linkHtmlOptions);
        }
    }
}


Honesty is best Policy.
www.mrlco.ir
0

#2 User is offline   m3hr@n 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 29-April 12

Posted 13 October 2012 - 10:53 AM


سلام مجدد؛
بالاخره راهشو پیدا کردم. فقط کافیه فایل اصلی اکستنشن رو ویرایش کنید. یعنی کد :

$html = '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>' . ob_get_clean();
رو به جای کد:

$html = ob_get_clean();
کپی کنید.
تموم شد. ;)


file name : EReadMore.php
Honesty is best Policy.
www.mrlco.ir
3

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users