mapper-php icon indicating copy to clipboard operation
mapper-php copied to clipboard

Set encoding for toXml

Open EgorGruzdev opened this issue 8 years ago • 3 comments

Example:

$model->toXml('utf-8');

Result:

<?xml version="1.0" encoding="utf-8"?><trains id="123"><train id="1"><name>Сапасан</name><departure>Москва</departure></train></trains>

Сurrently the result:

$model->toXml();
<?xml version="1.0"?><trains id="123"><train id="1"><name>&#x421;&#x430;&#x43F;&#x430;&#x441;&#x430;&#x43D;</name><departure>&#x41C;&#x43E;&#x441;&#x43A;&#x432;&#x430;</departure></train></trains>

I would have done it myself, but I can not find where to "dig."

EgorGruzdev avatar Oct 26 '17 09:10 EgorGruzdev

Found: /src/Mapper/XmlModelMapper.php (version 2.2.16) line 270

$elementXml = '<'.$elementName.'></'.$elementName.'>';

replace

$elementXml = '<?xml version="1.0" encoding="utf-8"?><'.$elementName.'></'.$elementName.'>';

but how to pass the encoding if you do not need utf-8

EgorGruzdev avatar Oct 26 '17 09:10 EgorGruzdev

Or:

    /**
     * @return string
     */
    public function toXml() {
        $mapper = new XmlModelMapper();
        return $mapper->unmap($this);
    }

replace

    /**
     * @return string
     */
    public function toXml() {
        $mapper = new XmlModelMapper();
        return mb_convert_encoding($mapper->unmap($this), 'UTF-8', 'HTML-ENTITIES');
    }

EgorGruzdev avatar Oct 26 '17 09:10 EgorGruzdev

I may have a solution for this, let me check and get back to you.

runz0rd avatar Oct 26 '17 12:10 runz0rd