bug66121.phpt 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. --TEST--
  2. Bug #66121 - UTF-8 lookbehinds match bytes instead of characters
  3. --FILE--
  4. <?php
  5. // Sinhala characters
  6. var_dump(preg_replace('/(?<!ක)/u', '*', 'ක'));
  7. var_dump(preg_replace('/(?<!ක)/u', '*', 'ම'));
  8. // English characters
  9. var_dump(preg_replace('/(?<!k)/u', '*', 'k'));
  10. var_dump(preg_replace('/(?<!k)/u', '*', 'm'));
  11. // Sinhala characters
  12. preg_match_all('/(?<!ක)/u', 'ම', $matches, PREG_OFFSET_CAPTURE);
  13. var_dump($matches);
  14. // invalid UTF-8
  15. var_dump(preg_replace('/(?<!ක)/u', '*', "\xFCක"));
  16. var_dump(preg_replace('/(?<!ක)/u', '*', "ක\xFC"));
  17. var_dump(preg_match_all('/(?<!ක)/u', "\xFCම", $matches, PREG_OFFSET_CAPTURE));
  18. var_dump(preg_match_all('/(?<!ක)/u', "\xFCම", $matches, PREG_OFFSET_CAPTURE));
  19. ?>
  20. --EXPECT--
  21. string(4) "*ක"
  22. string(5) "*ම*"
  23. string(2) "*k"
  24. string(3) "*m*"
  25. array(1) {
  26. [0]=>
  27. array(2) {
  28. [0]=>
  29. array(2) {
  30. [0]=>
  31. string(0) ""
  32. [1]=>
  33. int(0)
  34. }
  35. [1]=>
  36. array(2) {
  37. [0]=>
  38. string(0) ""
  39. [1]=>
  40. int(3)
  41. }
  42. }
  43. }
  44. NULL
  45. NULL
  46. bool(false)
  47. bool(false)