Browse Source

MFH: fix bug #46335 (DOMText::splitText doesn't handle multibyte characters)

add test
PHP-5.2.1RC1
Rob Richards 18 years ago
parent
commit
6a2fe2ad1a
  1. 35
      ext/dom/tests/bug46335.phpt
  2. 8
      ext/dom/text.c

35
ext/dom/tests/bug46335.phpt

@ -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

8
ext/dom/text.c

@ -172,19 +172,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);

Loading…
Cancel
Save