]> granicus.if.org Git - php/commitdiff
fix bug #46335 (DOMText::splitText doesn't handle multibyte characters)
authorRob Richards <rrichards@php.net>
Mon, 20 Oct 2008 12:44:28 +0000 (12:44 +0000)
committerRob Richards <rrichards@php.net>
Mon, 20 Oct 2008 12:44:28 +0000 (12:44 +0000)
add test

ext/dom/tests/bug46335.phpt [new file with mode: 0644]
ext/dom/text.c

diff --git a/ext/dom/tests/bug46335.phpt b/ext/dom/tests/bug46335.phpt
new file mode 100644 (file)
index 0000000..bea4ae9
--- /dev/null
@@ -0,0 +1,35 @@
+--TEST--
+Bug #46335 (DOMText::splitText doesn't handle multibyte characters).
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php 
+$textascii = 'This is an "example" of using DOM splitText';
+$text = 'This is an ‘example’ of using DOM splitText';
+$start = 30;
+$length = 3;
+
+$dom = new DOMDocument('1.0', 'UTF-8');
+$node = $dom->createTextNode($textascii);
+$dom->appendChild($node);
+
+print "Text: $node->textContent\n";
+
+$matched = $node->splitText($start);
+$matched->splitText($length);
+print "splitText (ASCII): $matched->textContent\n";
+
+$node = $dom->createTextNode($text);
+$dom->appendChild($node);
+
+print "Text: $node->textContent\n";
+
+$matched = $node->splitText($start);
+$matched->splitText($length);
+print "splitText (UTF-8): $matched->textContent\n";
+?>
+--EXPECT--
+Text: This is an "example" of using DOM splitText
+splitText (ASCII): DOM
+Text: This is an ‘example’ of using DOM splitText
+splitText (UTF-8): DOM
index 06b54a614280acaf8a5552031ba2b8a3eedba4d9..092e88427edf8dcb0feebce04e79b6b771ea7e3a 100644 (file)
@@ -171,19 +171,19 @@ PHP_FUNCTION(dom_text_split_text)
        if (cur == NULL) {
                RETURN_FALSE;
        }
-       length = xmlStrlen(cur);
+       length = xmlUTF8Strlen(cur);
 
        if (offset > length || offset < 0) {
                xmlFree(cur);
                RETURN_FALSE;
        }
 
-       first = xmlStrndup(cur, offset);
-       second = xmlStrdup(cur + offset);
+       first = xmlUTF8Strndup(cur, offset);
+       second = xmlUTF8Strsub(cur, offset, length - offset);
        
        xmlFree(cur);
 
-       xmlNodeSetContentLen(node, first, offset);
+       xmlNodeSetContent(node, first);
        nnode = xmlNewDocText(node->doc, second);
        
        xmlFree(first);