Symfony\Component\HttpFoundation\ResponseHeaderBag::makeDisposition PHP Метод

makeDisposition() публичный Метод

Generates a HTTP Content-Disposition field-value.
См. также: RFC 6266
public makeDisposition ( string $disposition, string $filename, string $filenameFallback = '' ) : string
$disposition string One of "inline" or "attachment"
$filename string A unicode string
$filenameFallback string A string containing only ASCII characters that is semantically equivalent to $filename. If the filename is already ASCII, it can be omitted, or just copied from $filename
Результат string A string suitable for use as a Content-Disposition field-value
    public function makeDisposition($disposition, $filename, $filenameFallback = '')
    {
        if (!in_array($disposition, array(self::DISPOSITION_ATTACHMENT, self::DISPOSITION_INLINE))) {
            throw new \InvalidArgumentException(sprintf('The disposition must be either "%s" or "%s".', self::DISPOSITION_ATTACHMENT, self::DISPOSITION_INLINE));
        }

        if ('' == $filenameFallback) {
            $filenameFallback = $filename;
        }

        // filenameFallback is not ASCII.
        if (!preg_match('/^[\x20-\x7e]*$/', $filenameFallback)) {
            throw new \InvalidArgumentException('The filename fallback must only contain ASCII characters.');
        }

        // percent characters aren't safe in fallback.
        if (false !== strpos($filenameFallback, '%')) {
            throw new \InvalidArgumentException('The filename fallback cannot contain the "%" character.');
        }

        // path separators aren't allowed in either.
        if (false !== strpos($filename, '/') || false !== strpos($filename, '\\') || false !== strpos($filenameFallback, '/') || false !== strpos($filenameFallback, '\\')) {
            throw new \InvalidArgumentException('The filename and the fallback cannot contain the "/" and "\\" characters.');
        }

        $output = sprintf('%s; filename="%s"', $disposition, str_replace('"', '\\"', $filenameFallback));

        if ($filename !== $filenameFallback) {
            $output .= sprintf("; filename*=utf-8''%s", rawurlencode($filename));
        }

        return $output;
    }

Usage Example

Пример #1
0
 /**
  * @dataProvider provideMakeDispositionFail
  * @expectedException \InvalidArgumentException
  */
 public function testMakeDispositionFail($disposition, $filename)
 {
     $headers = new ResponseHeaderBag();
     $headers->makeDisposition($disposition, $filename);
 }