Файл: symfony-2.7/src/Symfony/Component/Yaml/Escaper.php
Строк: 95
<?php
/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace SymfonyComponentYaml;
/**
 * Escaper encapsulates escaping rules for single and double-quoted
 * YAML strings.
 *
 * @author Matthew Lewinski <matthew@lewinski.org>
 */
class Escaper
{
    // Characters that would cause a dumped string to require double quoting.
    const REGEX_CHARACTER_TO_ESCAPE = "[\x00-\x1f]|xc2x85|xc2xa0|xe2x80xa8|xe2x80xa9";
    // Mapping arrays for escaping a double quoted string. The backslash is
    // first to ensure proper escaping because str_replace operates iteratively
    // on the input arrays. This ordering of the characters avoids the use of strtr,
    // which performs more slowly.
    private static $escapees = array('\', '\\', '\"', '"',
                                     "x00",  "x01",  "x02",  "x03",  "x04",  "x05",  "x06",  "x07",
                                     "x08",  "x09",  "x0a",  "x0b",  "x0c",  "x0d",  "x0e",  "x0f",
                                     "x10",  "x11",  "x12",  "x13",  "x14",  "x15",  "x16",  "x17",
                                     "x18",  "x19",  "x1a",  "x1b",  "x1c",  "x1d",  "x1e",  "x1f",
                                     "xc2x85", "xc2xa0", "xe2x80xa8", "xe2x80xa9",);
    private static $escaped = array('\\', '\"', '\\', '\"',
                                     "\0",   "\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\a",
                                     "\b",   "\t",   "\n",   "\v",   "\f",   "\r",   "\x0e", "\x0f",
                                     "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17",
                                     "\x18", "\x19", "\x1a", "\e",   "\x1c", "\x1d", "\x1e", "\x1f",
                                     "\N", "\_", "\L", "\P",);
    /**
     * Determines if a PHP value would require double quoting in YAML.
     *
     * @param string $value A PHP value
     *
     * @return bool True if the value would require double quotes.
     */
    public static function requiresDoubleQuoting($value)
    {
        return preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value);
    }
    /**
     * Escapes and surrounds a PHP value with double quotes.
     *
     * @param string $value A PHP value
     *
     * @return string The quoted, escaped string
     */
    public static function escapeWithDoubleQuotes($value)
    {
        return sprintf('"%s"', str_replace(self::$escapees, self::$escaped, $value));
    }
    /**
     * Determines if a PHP value would require single quoting in YAML.
     *
     * @param string $value A PHP value
     *
     * @return bool True if the value would require single quotes.
     */
    public static function requiresSingleQuoting($value)
    {
        // Determines if a PHP value is entirely composed of a value that would
        // require single quoting in YAML.
        if (in_array(strtolower($value), array('null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'))) {
            return true;
        }
        // Determines if the PHP value contains any single characters that would
        // cause it to require single quoting in YAML.
        return preg_match('/[ s ' " : { } [ ] , & * # ?] | A[ - ? | < > = ! % @ ` ]/x', $value);
    }
    /**
     * Escapes and surrounds a PHP value with single quotes.
     *
     * @param string $value A PHP value
     *
     * @return string The quoted, escaped string
     */
    public static function escapeWithSingleQuotes($value)
    {
        return sprintf("'%s'", str_replace(''', '''', $value));
    }
}