PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/phpunit/phpunit/PHPUnit/Util/String.php

https://bitbucket.org/alexpozdnyakov/kohana
PHP | 118 lines | 42 code | 10 blank | 66 comment | 20 complexity | 26c274d696490da57e348c7809a16ffe MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /**
  3. * PHPUnit
  4. *
  5. * Copyright (c) 2001-2012, Sebastian Bergmann <sebastian@phpunit.de>.
  6. * All rights reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. *
  12. * * Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. *
  15. * * Redistributions in binary form must reproduce the above copyright
  16. * notice, this list of conditions and the following disclaimer in
  17. * the documentation and/or other materials provided with the
  18. * distribution.
  19. *
  20. * * Neither the name of Sebastian Bergmann nor the names of his
  21. * contributors may be used to endorse or promote products derived
  22. * from this software without specific prior written permission.
  23. *
  24. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  25. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  26. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  27. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  28. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  29. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  30. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  31. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  32. * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  33. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  34. * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  35. * POSSIBILITY OF SUCH DAMAGE.
  36. *
  37. * @package PHPUnit
  38. * @subpackage Util
  39. * @author Sebastian Bergmann <sebastian@phpunit.de>
  40. * @copyright 2001-2012 Sebastian Bergmann <sebastian@phpunit.de>
  41. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  42. * @link http://www.phpunit.de/
  43. * @since File available since Release 3.6.0
  44. */
  45. /**
  46. * String helpers.
  47. *
  48. * @package PHPUnit
  49. * @subpackage Util
  50. * @author Sebastian Bergmann <sebastian@phpunit.de>
  51. * @copyright 2001-2012 Sebastian Bergmann <sebastian@phpunit.de>
  52. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  53. * @link http://www.phpunit.de/
  54. * @since Class available since Release 3.6.0
  55. */
  56. class PHPUnit_Util_String
  57. {
  58. /**
  59. * Converts a string to UTF-8 encoding.
  60. *
  61. * @param string $string
  62. * @return string
  63. */
  64. public static function convertToUtf8($string)
  65. {
  66. if (!self::isUtf8($string)) {
  67. if (function_exists('mb_convert_encoding')) {
  68. $string = mb_convert_encoding($string, 'UTF-8');
  69. } else {
  70. $string = utf8_encode($string);
  71. }
  72. }
  73. return $string;
  74. }
  75. /**
  76. * Checks a string for UTF-8 encoding.
  77. *
  78. * @param string $string
  79. * @return boolean
  80. */
  81. protected static function isUtf8($string)
  82. {
  83. $length = strlen($string);
  84. for ($i = 0; $i < $length; $i++) {
  85. if (ord($string[$i]) < 0x80) {
  86. $n = 0;
  87. }
  88. else if ((ord($string[$i]) & 0xE0) == 0xC0) {
  89. $n = 1;
  90. }
  91. else if ((ord($string[$i]) & 0xF0) == 0xE0) {
  92. $n = 2;
  93. }
  94. else if ((ord($string[$i]) & 0xF0) == 0xF0) {
  95. $n = 3;
  96. }
  97. else {
  98. return FALSE;
  99. }
  100. for ($j = 0; $j < $n; $j++) {
  101. if ((++$i == $length) || ((ord($string[$i]) & 0xC0) != 0x80)) {
  102. return FALSE;
  103. }
  104. }
  105. }
  106. return TRUE;
  107. }
  108. }