আপনি যেমন অনুরোধ করেছিলেন তেমন কোনও ফাইল সিস্টেমের জন্য স্যানিটাইজ করতে পারেন
function filter_filename($name) {
// remove illegal file system characters https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words
$name = str_replace(array_merge(
array_map('chr', range(0, 31)),
array('<', '>', ':', '"', '/', '\\', '|', '?', '*')
), '', $name);
// maximise filename length to 255 bytes http://serverfault.com/a/9548/44086
$ext = pathinfo($name, PATHINFO_EXTENSION);
$name= mb_strcut(pathinfo($name, PATHINFO_FILENAME), 0, 255 - ($ext ? strlen($ext) + 1 : 0), mb_detect_encoding($name)) . ($ext ? '.' . $ext : '');
return $name;
}
ফাইল সিস্টেমে অন্য সমস্ত কিছুর অনুমতি রয়েছে, সুতরাং প্রশ্নের সঠিক উত্তর দেওয়া হয়েছে ...
... তবে আপনি যদি কোনও অনিরাপদ এইচটিএমএল প্রসঙ্গে এটি পরে ব্যবহার করেন তবে কোনও ফাইলনেমে উদাহরণস্বরূপ একক উক্তিগুলির জন্য অনুমতি দেওয়া বিপজ্জনক হতে পারে '
কারণ এটি একেবারে আইনী ফাইলনাম:
' onerror= 'alert(document.cookie).jpg
একটি এক্সএসএস হোল হয়ে যায় :
<img src='<? echo $image ?>' />
// output:
<img src=' ' onerror= 'alert(document.cookie)' />
সে কারণে, জনপ্রিয় সিএমএস সফ্টওয়্যার ওয়ার্ডপ্রেস এগুলি সরিয়ে দেয় তবে তারা কিছু আপডেটের পরে সমস্ত প্রাসঙ্গিক অক্ষর আবৃত করে :
$special_chars = array("?", "[", "]", "/", "\\", "=", "<", ">", ":", ";", ",", "'", "\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", "%", "+", chr(0));
// ... a few rows later are whitespaces removed as well ...
preg_replace( '/[\r\n\t -]+/', '-', $filename )
অবশেষে তাদের তালিকায় এখন বেশিরভাগ অক্ষর অন্তর্ভুক্ত রয়েছে যা ইউআরআই রিসার্ভেড-অক্ষর এবং ইউআরএল অনিরাপদ অক্ষর তালিকার অংশ।
অবশ্যই আপনি এইচটিএমএল আউটপুটে এই চারটি অক্ষরটি সহজেই এনকোড করতে পারেন তবে বেশিরভাগ বিকাশকারী এবং আমিও "আফসোসের চেয়ে ভাল নিরাপদ" প্রতিচ্ছবিটি অনুসরণ করুন এবং সেগুলি আগেই মুছুন।
সুতরাং অবশেষে আমি এটি ব্যবহার করার পরামর্শ দেব:
function filter_filename($filename, $beautify=true) {
// sanitize filename
$filename = preg_replace(
'~
[<>:"/\\|?*]| # file system reserved https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words
[\x00-\x1F]| # control characters http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx
[\x7F\xA0\xAD]| # non-printing characters DEL, NO-BREAK SPACE, SOFT HYPHEN
[#\[\]@!$&\'()+,;=]| # URI reserved https://tools.ietf.org/html/rfc3986#section-2.2
[{}^\~`] # URL unsafe characters https://www.ietf.org/rfc/rfc1738.txt
~x',
'-', $filename);
// avoids ".", ".." or ".hiddenFiles"
$filename = ltrim($filename, '.-');
// optional beautification
if ($beautify) $filename = beautify_filename($filename);
// maximize filename length to 255 bytes http://serverfault.com/a/9548/44086
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$filename = mb_strcut(pathinfo($filename, PATHINFO_FILENAME), 0, 255 - ($ext ? strlen($ext) + 1 : 0), mb_detect_encoding($filename)) . ($ext ? '.' . $ext : '');
return $filename;
}
ফাইল সিস্টেমের ক্ষেত্রে সমস্যা সৃষ্টি করে না এমন সমস্ত কিছু অতিরিক্ত ফাংশনের অংশ হওয়া উচিত:
function beautify_filename($filename) {
// reduce consecutive characters
$filename = preg_replace(array(
// "file name.zip" becomes "file-name.zip"
'/ +/',
// "file___name.zip" becomes "file-name.zip"
'/_+/',
// "file---name.zip" becomes "file-name.zip"
'/-+/'
), '-', $filename);
$filename = preg_replace(array(
// "file--.--.-.--name.zip" becomes "file.name.zip"
'/-*\.-*/',
// "file...name..zip" becomes "file.name.zip"
'/\.{2,}/'
), '.', $filename);
// lowercase for windows/unix interoperability http://support.microsoft.com/kb/100625
$filename = mb_strtolower($filename, mb_detect_encoding($filename));
// ".file-name.-" becomes "file-name"
$filename = trim($filename, '.-');
return $filename;
}
এবং ফলাফলটি খালি থাকলে এই মুহুর্তে আপনাকে একটি ফাইলের নাম তৈরি করতে হবে এবং আপনি ইউটিএফ -8 টি অক্ষর এনকোড করতে চান কিনা তা সিদ্ধান্ত নিতে পারেন। তবে আপনার প্রয়োজন নেই যে ইউটিএফ -8 হিসাবে ওয়েব হোস্টিং প্রসঙ্গে ব্যবহৃত সমস্ত ফাইল সিস্টেমে অনুমোদিত।
আপনাকে কেবলমাত্র ব্যবহার করতে হবে urlencode()
(যেমনটি আপনি আপনার সমস্ত ইউআরএল দিয়ে আশা করছেন) তাই ফাইলের საბეჭდი_მანქანა.jpg
নামটি এই URL টি আপনার <img src>
বা <a href>
:
http://www.maxrev.de/html/img/%E1%83% হিসাবে পরিণত হয় ক 1% ই 1% 83% 90% ই 1% 83% 91% ই 1% 83% 94% ই 1% 83% খ্রি% ই 1% 83% 93% ই 1% 83% 98_% ই 1% 83% 9B% ই 1% 83% 90% ই 1% 83% 9c% ই 1% 83% A5% ই 1% 83% 90% ই 1% 83% 9c% ই 1% 83% 90.jpg
স্ট্যাকওভারফ্লো এটি করে, তাই ব্যবহারকারীরা যেমনটি করতে পারে তেমন আমি এই লিঙ্কটি পোস্ট করতে পারি:
http://www.maxrev.de/html/img/ საბეჭდი_მანქანა। Jpg
সুতরাং এটি একটি সম্পূর্ণ আইনী ফাইল নাম এবং @ সিকোয়েন্সডিজিটাল ডট কম হিসাবে তার উত্তরে উল্লিখিত কোনও সমস্যা নয় ।