Changeset 1058
- Timestamp:
- 11/21/07 21:40:44 (9 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/main/php/net/stubbles/xml/stubDomXMLStreamWriter.php
r1019 r1058 89 89 * Write a text node 90 90 * 91 * Data has to be encoded even if document encoding is not UTF-892 *93 91 * @param string $data 94 * @link http://php.net/manual/en/function.dom-domdocument-save.php#6795295 92 */ 96 93 public function writeText($data) … … 98 95 try { 99 96 libxml_use_internal_errors(true); 100 $textNode = $this->doc->createTextNode( utf8_encode($data));97 $textNode = $this->doc->createTextNode($this->encode($data)); 101 98 $this->addToDom($textNode); 102 99 $errors = libxml_get_errors(); … … 118 115 try { 119 116 libxml_use_internal_errors(true); 120 $cdataNode = $this->doc->createCDATASection( utf8_encode($cdata));117 $cdataNode = $this->doc->createCDATASection($this->encode($cdata)); 121 118 $this->addToDom($cdataNode); 122 119 $errors = libxml_get_errors(); … … 138 135 try { 139 136 libxml_use_internal_errors(true); 140 $commentNode = $this->doc->createComment( utf8_encode($comment));137 $commentNode = $this->doc->createComment($this->encode($comment)); 141 138 $this->addToDom($commentNode); 142 139 $errors = libxml_get_errors(); … … 159 156 try { 160 157 libxml_use_internal_errors(true); 161 $piNode = $this->doc->createProcessingInstruction($target, utf8_encode($data));158 $piNode = $this->doc->createProcessingInstruction($target, $data); 162 159 $this->addToDom($piNode); 163 160 $errors = libxml_get_errors(); … … 202 199 libxml_use_internal_errors(true); 203 200 $currentElement = end($this->elementStack); 204 $currentElement->setAttribute($attributeName, utf8_encode($attributeValue));201 $currentElement->setAttribute($attributeName, $this->encode($attributeValue)); 205 202 $errors = libxml_get_errors(); 206 203 if (!empty($errors)) { … … 321 318 return implode(', ', $messages); 322 319 } 320 321 /** 322 * helper method to transform data into correct encoding 323 * 324 * Data has to be encoded even if document encoding is not UTF-8. 325 * 326 * @param string $data 327 * @return string 328 * @see http://php.net/manual/en/function.dom-domdocument-save.php#67952 329 */ 330 protected function encode($data) 331 { 332 if (mb_detect_encoding($data, 'UTF-8, ISO-8859-1') === 'UTF-8') { 333 return $data; 334 } 335 336 return utf8_encode($data); 337 } 323 338 } 324 339 ?> trunk/src/test/php/net/stubbles/xml/stubDomXMLStreamWriterTestCase.php
r1019 r1058 71 71 72 72 /** 73 * Test creating a document with attributes 74 */ 75 public function testAttributesWithGermanUmlauts() { 76 $writer = new stubDomXMLStreamWriter(); 77 $writer->writeStartElement('root'); 78 $writer->writeStartElement('foo'); 79 $writer->writeAttribute('bar', 'häößü'); 80 $writer->writeEndElement(); 81 $writer->writeEndElement(); 82 83 $this->assertEqual('<?xml version="1.0" encoding="UTF-8"?>' . "\n". '<root><foo bar="' . utf8_encode('häößü') . '"/></root>', $writer->asXML()); 84 } 85 86 /** 87 * Test creating a document with attributes 88 */ 89 public function testAttributesWithGermanUmlautsUTF8() { 90 $writer = new stubDomXMLStreamWriter(); 91 $writer->writeStartElement('root'); 92 $writer->writeStartElement('foo'); 93 $writer->writeAttribute('bar', utf8_encode('häößü')); 94 $writer->writeEndElement(); 95 $writer->writeEndElement(); 96 97 $this->assertEqual('<?xml version="1.0" encoding="UTF-8"?>' . "\n". '<root><foo bar="' . utf8_encode('häößü') . '"/></root>', $writer->asXML()); 98 } 99 100 /** 73 101 * Test creating a document with a text node 74 102 */ … … 95 123 96 124 /** 125 * Test creating a document with a text node containing german umlauts. 126 */ 127 public function testTextWithGermanUmlautsInUTF8() { 128 $writer = new stubDomXMLStreamWriter(); 129 $writer->writeStartElement('root'); 130 $writer->writeText(utf8_encode('This is text containg äöü.')); 131 $writer->writeEndElement(); 132 133 $this->assertEqual('<?xml version="1.0" encoding="UTF-8"?>' . "\n". '<root>This is text containg ' . utf8_encode('äöü') . '.</root>', $writer->asXML()); 134 } 135 136 /** 97 137 * Test creating a document with character data 98 138 */ … … 107 147 108 148 /** 149 * Test creating a document with character data 150 */ 151 public function testCDataWithGermanUmlauts() { 152 $writer = new stubDomXMLStreamWriter(); 153 $writer->writeStartElement('root'); 154 $writer->writeCData('This is text containing äöü.'); 155 $writer->writeEndElement(); 156 157 $this->assertEqual('<?xml version="1.0" encoding="UTF-8"?>' . "\n". '<root><![CDATA[This is text containing ' . utf8_encode('äöü') . '.]]></root>', $writer->asXML()); 158 } 159 160 /** 161 * Test creating a document with character data 162 */ 163 public function testCDataWithGermanUmlautsUTF8() { 164 $writer = new stubDomXMLStreamWriter(); 165 $writer->writeStartElement('root'); 166 $writer->writeCData(utf8_encode('This is text containing äöü.')); 167 $writer->writeEndElement(); 168 169 $this->assertEqual('<?xml version="1.0" encoding="UTF-8"?>' . "\n". '<root><![CDATA[This is text containing ' . utf8_encode('äöü') . '.]]></root>', $writer->asXML()); 170 } 171 172 /** 109 173 * Test creating a document with a comment 110 174 */ … … 116 180 117 181 $this->assertEqual('<?xml version="1.0" encoding="UTF-8"?>' . "\n". '<root><!--This is a comment.--></root>', $writer->asXML()); 182 } 183 184 /** 185 * Test creating a document with a comment 186 */ 187 public function testCommentWithGermanUmlauts() { 188 $writer = new stubDomXMLStreamWriter(); 189 $writer->writeStartElement('root'); 190 $writer->writeComment('This is a comment containing äöü.'); 191 $writer->writeEndElement(); 192 193 $this->assertEqual('<?xml version="1.0" encoding="UTF-8"?>' . "\n". '<root><!--This is a comment containing ' . utf8_encode('äöü') . '.--></root>', $writer->asXML()); 194 } 195 196 /** 197 * Test creating a document with a comment 198 */ 199 public function testCommentWithGermanUmlautsUTF8() { 200 $writer = new stubDomXMLStreamWriter(); 201 $writer->writeStartElement('root'); 202 $writer->writeComment(utf8_encode('This is a comment containing äöü.')); 203 $writer->writeEndElement(); 204 205 $this->assertEqual('<?xml version="1.0" encoding="UTF-8"?>' . "\n". '<root><!--This is a comment containing ' . utf8_encode('äöü') . '.--></root>', $writer->asXML()); 118 206 } 119 207
