diff --git a/uoj/1/app/controllers/problem_data_manage.php b/uoj/1/app/controllers/problem_data_manage.php index dcb1aea..a9c3d7d 100644 --- a/uoj/1/app/controllers/problem_data_manage.php +++ b/uoj/1/app/controllers/problem_data_manage.php @@ -65,7 +65,7 @@ EOD; if (strStartWith($mimetype, 'text/')) { echo htmlspecialchars(uojFilePreview($file_full_name, $output_limit)); } else { - echo htmlspecialchars(strOmit(shell_exec('xxd -g 4 -l 5000 ' . escapeshellarg($file_full_name) . ' | head -c ' . ($output_limit + 4)), $output_limit)); + echo htmlspecialchars(uojFilePreview($file_full_name, $output_limit, 'binary')); } echo "\n"; } diff --git a/uoj/1/app/libs/uoj-html-lib.php b/uoj/1/app/libs/uoj-html-lib.php index 20f5309..b0ae04e 100644 --- a/uoj/1/app/libs/uoj-html-lib.php +++ b/uoj/1/app/libs/uoj-html-lib.php @@ -24,8 +24,13 @@ function uojHandleAtSign($str, $uri) { return array($res, $referrers_list); } -function uojFilePreview($file_name, $output_limit) { - return strOmit(file_get_contents($file_name, false, null, -1, $output_limit + 4), $output_limit); +function uojFilePreview($file_name, $output_limit, $file_type = 'text') { + switch ($file_type) { + case 'text': + return strOmit(file_get_contents($file_name, false, null, 0, $output_limit + 4), $output_limit); + default: + return strOmit(shell_exec('xxd -g 4 -l 5000 ' . escapeshellarg($file_name) . ' | head -c ' . ($output_limit + 4)), $output_limit); + } } function uojIncludeView($name, $view_params = array()) {