PHP Sanitize Имя файла (корейский язык) и принудительная загрузка - PullRequest
0 голосов
/ 06 июня 2018

Есть моя функция очистки.

function sanitize($string, $forceLowercase = false, $anal = false, $limitFilename = 128)
{
    $strip = array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "=", "+", "[", "{", "]",
        "}", "\\", "|", ";", ":", "\"", "'", "‘", "’", "“", "”", "–", "—",
        "—", "–", ",", "<", ".", ">", "/", "?");
    $clean = trim(str_replace($strip, "", strip_tags($string)));
    $clean = preg_replace('/\s+/', "-", $clean);
    $clean = ($anal) ? preg_replace("/[^a-zA-Z0-9]/", "", $clean) : $clean;
    $clean = ($forceLowercase) ?
        (function_exists('mb_strtolower')) ?
            mb_strtolower($clean, 'UTF-8') :
            strtolower($clean) :
        $clean;
    $specialChars = "\x00\x21\x22\x24\x25\x2a\x2f\x3a\x3c\x3e\x3f\x5c\x7c";
    $clean = str_replace(str_split($specialChars), '_', $clean);
    $clean = substr($clean, 0, $limitFilename);
    $clean = mb_convert_encoding($clean, 'UTF-8', 'UTF-8');
    $clean = html_entity_decode($clean);
    return $clean;
}

Я посылаю имя файла с этим заголовком работает в английской строке.

header('Content-Disposition: attachment; filename="' . sanitize($string) . '.3gp"');

Но не работает с этой строкой

(자막) 2018 브리튼 즈 갓 탤런트 - 마크 스펠 만 "'진짜 마술' 은 이런 것" (Британский талант - Марк Спельманн) 101 부저

Я получаю эту ошибку.

AH02430: заголовок ответа «Content-Disposition», значение «attachment»;имя файла = "\ XEC \ x9e \ x90 \ xeb \ xa7 \ x89-2018- \ xeb \ XB8 \ x8c \ xeb \ xa6 \ XAC \ фиксировано \ X8A \ XBC \ XEC \ xa6 \ x88- \ хеа \ XB0 \ x93-\ фиксировано \ x83 \ xa4 \ xeb \ x9f \ XB0 \ фиксировано \ X8A \ XB8 --- \ xeb \ xa7 \ x88 \ фиксировано \ x81 \ xac- \ XEC \ X8A \ xa4 \ фиксировано \ x8e \ xa0 \ xeb \ xa7\ x8c- \ XEC \ xa7 \ x84 \ XEC \ xa7 \ x9c- \ xeb \ xa7 \ x88 \ XEC \ x88 \ xa0 \ шм ?? \ Ъ ?? \ xc8 \ x88- \ x10 ?? \ x18 ???\ x11 ?? \ b \ x15 \ x18 \ x19? \ bH \ x13X ?? \ x14? \ x19 \ x1bX ?? H ??????. 3gp "'содержит недопустимые символы, прерывая запрос

Где моя ошибка?

...