Xml.php
Same filename in this branch
Namespace
PHPUnit\UtilFile
-
vendor/
phpunit/ phpunit/ src/ Util/ Xml/ Xml.php
View source
<?php
declare (strict_types=1);
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PHPUnit\Util;
use const ENT_QUOTES;
use function htmlspecialchars;
use function mb_convert_encoding;
use function ord;
use function preg_replace;
use function strlen;
/**
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
*
* @internal This class is not covered by the backward compatibility promise for PHPUnit
*/
final class Xml {
/**
* Escapes a string for the use in XML documents.
*
* Any Unicode character is allowed, excluding the surrogate blocks, FFFE,
* and FFFF (not even as character reference).
*
* @see https://www.w3.org/TR/xml/#charsets
*/
public static function prepareString(string $string) : string {
return preg_replace('/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/', '', htmlspecialchars(self::convertToUtf8($string), ENT_QUOTES));
}
private static function convertToUtf8(string $string) : string {
if (!self::isUtf8($string)) {
$string = mb_convert_encoding($string, 'UTF-8');
}
return $string;
}
private static function isUtf8(string $string) : bool {
$length = strlen($string);
for ($i = 0; $i < $length; $i++) {
if (ord($string[$i]) < 0x80) {
$n = 0;
}
elseif ((ord($string[$i]) & 0xe0) === 0xc0) {
$n = 1;
}
elseif ((ord($string[$i]) & 0xf0) === 0xe0) {
$n = 2;
}
elseif ((ord($string[$i]) & 0xf0) === 0xf0) {
$n = 3;
}
else {
return false;
}
for ($j = 0; $j < $n; $j++) {
if (++$i === $length || (ord($string[$i]) & 0xc0) !== 0x80) {
return false;
}
}
}
return true;
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
Xml | @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit |