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

[font="Tahoma"][rtl]

سلام دوستان؛

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

کسی راه حلی مناسب برای نمایش صحیح کاراکترهای utf8 در DOMDocument()داره؟

توی زبان فارسی و فرانسه و کلا یونیکد utf8 این مدل توی رندر کردن مشکل داره

این کد اکستنشن هست:

[/rtl][/font]





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);

        }

    }

}




[font="Tahoma"][rtl]

سلام مجدد؛

بالاخره راهشو پیدا کردم. فقط کافیه فایل اصلی اکستنشن رو ویرایش کنید. یعنی کد :[/rtl]


$html = '<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>' . ob_get_clean();

[rtl]رو به جای کد:[/rtl]


$html = ob_get_clean();

[rtl]کپی کنید.

تموم شد. ;) [/rtl]

[/font]

file name : EReadMore.php