PageRenderTime 82ms CodeModel.GetById 40ms app.highlight 3ms RepoModel.GetById 37ms app.codeStats 0ms

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

https://bitbucket.org/sklyarov_ivan/trap
PHP | 118 lines | 42 code | 10 blank | 66 comment | 20 complexity | 26c274d696490da57e348c7809a16ffe MD5 | raw file
  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/**
 47 * String helpers.
 48 *
 49 * @package    PHPUnit
 50 * @subpackage Util
 51 * @author     Sebastian Bergmann <sebastian@phpunit.de>
 52 * @copyright  2001-2012 Sebastian Bergmann <sebastian@phpunit.de>
 53 * @license    http://www.opensource.org/licenses/BSD-3-Clause  The BSD 3-Clause License
 54 * @link       http://www.phpunit.de/
 55 * @since      Class available since Release 3.6.0
 56 */
 57class PHPUnit_Util_String
 58{
 59    /**
 60     * Converts a string to UTF-8 encoding.
 61     *
 62     * @param  string $string
 63     * @return string
 64     */
 65    public static function convertToUtf8($string)
 66    {
 67        if (!self::isUtf8($string)) {
 68            if (function_exists('mb_convert_encoding')) {
 69                $string = mb_convert_encoding($string, 'UTF-8');
 70            } else {
 71                $string = utf8_encode($string);
 72            }
 73        }
 74
 75        return $string;
 76    }
 77
 78    /**
 79     * Checks a string for UTF-8 encoding.
 80     *
 81     * @param  string $string
 82     * @return boolean
 83     */
 84    protected static function isUtf8($string)
 85    {
 86        $length = strlen($string);
 87
 88        for ($i = 0; $i < $length; $i++) {
 89            if (ord($string[$i]) < 0x80) {
 90                $n = 0;
 91            }
 92
 93            else if ((ord($string[$i]) & 0xE0) == 0xC0) {
 94                $n = 1;
 95            }
 96
 97            else if ((ord($string[$i]) & 0xF0) == 0xE0) {
 98                $n = 2;
 99            }
100
101            else if ((ord($string[$i]) & 0xF0) == 0xF0) {
102                $n = 3;
103            }
104
105            else {
106                return FALSE;
107            }
108
109            for ($j = 0; $j < $n; $j++) {
110                if ((++$i == $length) || ((ord($string[$i]) & 0xC0) != 0x80)) {
111                    return FALSE;
112                }
113            }
114        }
115
116        return TRUE;
117    }
118}