| <?php | 
| /* | 
|  * filesave.php | 
|  * To be used with ext-server_opensave.js for SVG-edit | 
|  * | 
|  * Licensed under the MIT License | 
|  * | 
|  * Copyright(c) 2010 Alexis Deveria | 
|  * | 
|  */ | 
|   | 
| function encodeRFC5987ValueChars ($str) { | 
|   // See https://tools.ietf.org/html/rfc5987#section-3.2.1 | 
|   // For better readability within headers, add back the characters escaped by rawurlencode but still allowable | 
|   // Although RFC3986 reserves "!" (%21), RFC5987 does not | 
|   return preg_replace_callback('@%(2[1346B]|5E|60|7C)@', function ($matches) { | 
|     return chr('0x' . $matches[1]); | 
|   }, rawurlencode($str)); | 
| } | 
|   | 
| require('allowedMimeTypes.php'); | 
|   | 
| $mime = (!isset($_POST['mime']) || !in_array($_POST['mime'], $allowedMimeTypesBySuffix)) ? 'image/svg+xml;charset=UTF-8' : $_POST['mime']; | 
|   | 
| if (!isset($_POST['output_svg']) && !isset($_POST['output_img'])) { | 
|   die('post fail'); | 
| } | 
|   | 
| $file = ''; | 
|   | 
| $suffix = '.' . array_search($mime, $allowedMimeTypesBySuffix); | 
|   | 
| if (isset($_POST['filename']) && strlen($_POST['filename']) > 0) { | 
|   $file = $_POST['filename'] . $suffix; | 
| } else { | 
|   $file = 'image' . $suffix; | 
| } | 
|   | 
| if ($suffix == '.svg') { | 
|   $contents = $_POST['output_svg']; | 
| } else { | 
|   $contents = $_POST['output_img']; | 
|   $pos = (strpos($contents, 'base64,') + 7); | 
|   $contents = base64_decode(substr($contents, $pos)); | 
| } | 
|   | 
| header('Cache-Control: public'); | 
| header('Content-Description: File Transfer'); | 
|   | 
| // See https://tools.ietf.org/html/rfc6266#section-4.1 | 
| header("Content-Disposition: attachment; filename*=UTF-8''" . encodeRFC5987ValueChars( | 
|   // preg_replace('@[\\\\/:*?"<>|]@', '', $file) // If we wanted to strip Windows-disallowed characters server-side (but not a security issue, so we can strip client-side instead) | 
|   $file | 
| )); | 
| header('Content-Type: ' .  $mime); | 
| header('Content-Transfer-Encoding: binary'); | 
|   | 
| echo $contents; | 
|   | 
| ?> |