স্ট্রিং থেকে এক্সটেনশন কীভাবে সরানো যায় (কেবল আসল এক্সটেনশন!)


135

আমি একটি ছোট ফাংশন সন্ধান করছি যা আমাকে ফাইল নাম থেকে এক্সটেনশানটি সরাতে দেয়।

গুগল করে আমি অনেক উদাহরণ পেয়েছি, তবে সেগুলি খারাপ, কারণ তারা "" দিয়ে স্ট্রিংয়ের কিছু অংশ সরিয়ে ফেলে। । তারা সীমিতার জন্য বিন্দু ব্যবহার করে এবং কেবল স্ট্রিং কাটায়।

এই স্ক্রিপ্টগুলি দেখুন,

$from = preg_replace('/\.[^.]+$/','',$from);

অথবা

 $from=substr($from, 0, (strlen ($from)) - (strlen (strrchr($filename,'.'))));

যখন আমরা এর মতো স্ট্রিং যুক্ত করি:

এটি.সামস্ট্রিংয়ের উদাহরণ

এটি কেবল "এই" ফিরে আসবে ...

এক্সটেনশনে 3 বা 4 অক্ষর থাকতে পারে, সুতরাং আমাদের বিন্দু 4 বা 5 অবস্থানে রয়েছে কিনা তা পরীক্ষা করে দেখতে হবে এবং তারপরে এটি সরিয়ে ফেলতে হবে।

এটা কিভাবে করা যাবে?


1
একটি "বাস্তব" এক্সটেনশন কি? আপনি সর্বশেষ 4 বা লেস অক্ষরগুলি বিন্দু দ্বারা চালিত হলে সরাতে চান?
ক্লাইফ

"কর্নেল শাপেল" - এটি উইন্ডোজ ব্যবহারকারীদের জন্য ডিজাইন করা হয়েছে। "ক্লিফি" - হ্যাঁ, আমি বিন্দুর পরে সমস্ত কিছু সরিয়ে ফেলতে চাই, তবে এটি কেবল 4 বা 5 পজিশনে থাকলে ".জেপেইগ" বা "। এমপি 3" উপস্থাপন করবে। আমি শুধু এটি সরাতে চাই না। আমি জানি আমি স্ট্রিং-পস এবং কাটা স্ট্রিং ব্যবহার করে নিজেই এটি করতে পারি যদি স্টেটমেন্ট ব্যবহার করে (যদি 5 টি পিএস = ডট হয় তবে ডান 5 টি অক্ষর থেকে কাটা (rtrim), যদি 4 পোস্ট = ডট হয় তবে rtrim 4, অন্যথায় কোনও পরিবর্তন ছাড়াই ফিরে আসুন But তবে হয়তো এটি দ্রুত সমাধান।
মার্ক

3
.প্যাকেজ ফাইল সম্পর্কে কী? বা .উনিটি? 4 টি অক্ষরে এক্সটেনশন সীমাবদ্ধ করতে কিছুটা স্বেচ্ছাচারী বলে মনে হচ্ছে।
rdb

উত্তর:


172

আর একবার চেষ্টা কর:

$withoutExt = preg_replace('/\\.[^.\\s]{3,4}$/', '', $filename);

সুতরাং, এটি একটি বিন্দুর সাথে মিলে যায় তার পরে তিন বা চারটি অক্ষর যা কোনও বিন্দু বা স্থান নয়। "3 বা 4" বিধিটি সম্ভবত শিথিল করা উচিত, যেহেতু প্রচুর ফাইল এক্সটেনশান সংক্ষিপ্ত বা দীর্ঘ হয়।


সমস্যাটি হ'ল এমন ব্যক্তিরাও আছেন যাঁরা ফাইলগুলির নাম পরিবর্তন করে:20120720.something.somethingelse.jpg
ওবর্ম্ক ক্রোনেন

3
আমি মনে করি না যে এটি দুটি অক্ষরের ফাইলের সাথে এক্সটেনশন হিসাবে কাজ করবে
NaturalBornCamper

1
TY! দয়া করে নোট করুন যে আপনি যদি পরিবর্তনশীল প্রতিস্থাপন সম্পাদন না করেন তবে আপনার একক উদ্ধৃতি ব্যবহার করা উচিত যেমন"$var"
আলেগোয়া

ভাল, এটিকে .py ফাইলগুলির সাথে ব্যবহার করার জন্য আমি অনুমান করি যে আপনাকে কেবল 3,4:> পরিবর্তে 2,3,4 যোগ করতে হবে!
ভোগদেভ

2
@voghDev এর {2,4}পরিবর্তে আপনার যোগ করা উচিত 2 থেকে 4 টি অক্ষরের সাহায্যে এক্সটেনশানগুলিকে সমর্থন করুন{3,4}
টিমো হুভিনেন


81

ম্যানুয়াল থেকে, প্যাথিনফো :

<?php
    $path_parts = pathinfo('/www/htdocs/index.html');

    echo $path_parts['dirname'], "\n";
    echo $path_parts['basename'], "\n";
    echo $path_parts['extension'], "\n";
    echo $path_parts['filename'], "\n"; // Since PHP 5.2.0
?>

এটি সঠিকভাবে পরিচালনার জন্য একটি সম্পূর্ণ পথ হতে হবে না। এটা ঠিক যেমন সুখে বিশ্লেষণ করতে হবে file.jpgযেমন /path/to/my/file.jpg


আমি ইতিমধ্যে এটি পরীক্ষা করেছিলাম। উপরের মত একই ভুল। T.sec - "xxx" থেকে "_ path_parts ['filename']" অ্যাক্সেস ব্যবহারের চেষ্টা করুন - "xxx" 23 12 32 3 a twym2 এটি কেবলমাত্র টি ফিরে আসবে above উপরের উদাহরণ থেকে এটি কিছু অপসারণ করা উচিত নয়!
মার্ক

56

পিএইচপি বেসনেম () ব্যবহার করুন

(পিএইচপি 4, পিএইচপি 5)

var_dump(basename('test.php', '.php'));

আউটপুট: স্ট্রিং (4) "পরীক্ষা"


2
+1 যদি কোনও এক্সটেনশনের জন্য উল্লিখিত প্রয়োজনীয়তাগুলি কঠোর না হয় তবে এটি সঠিক উত্তর হবে।
কায়লা

1
উপর করে এ খুঁজছি php.net সেখানে একটি অ্যারের ... যা আমি যেমন কিছু ব্যবহার উন্নত করা যেতে পারে মনে সঙ্গে কাজ সম্পর্কে একটি ধারণা অ্যারে-হাঁটার
CrandellWS

35

এটি একটি বরং সহজ সমাধান এবং প্রসারণ কত দীর্ঘ হোক না কেন স্ট্রিংয়ে কতগুলি বিন্দু বা অন্যান্য অক্ষর থাকুক তা কার্যকর হবে।

$filename = "abc.def.jpg";

$newFileName = substr($filename, 0 , (strrpos($filename, ".")));

//$newFileName will now be abc.def

মূলত এটি কেবল শেষ ঘটনার সন্ধান করে। এবং তারপরে বিন্দু পর্যন্ত সমস্ত অক্ষর পুনরুদ্ধার করতে স্ট্রিং ব্যবহার করে।

এটি আপনার গুগল করা উদাহরণগুলির মতো তবে নিয়মিত প্রকাশ এবং অন্যান্য উদাহরণগুলির চেয়ে সহজ, দ্রুত এবং সহজ। ভাল ইমো যাই হোক। আশা করি এটি কাউকে সাহায্য করবে।


2
আমি জানি এটি খুব দেরিতে আসছে, তবে আমি মনে করি এটিই সেরা উত্তর। দুর্দান্ত কাজ করে।
অ্যাগবোগিদি মাইকেল

এটি * নিক্স লুকানো ফাইলগুলির জন্য এক্সটেনশন ছাড়াই কাজ করবে না উদাহরণস্বরূপ,.htaccess
ফ্র0zenFyr

12

আপনি পিএইচপি সহায়তা হিসাবে ব্যবহার করে যা ব্যবহার করতে পারেন ...

$withoutExt = pathinfo($path, PATHINFO_DIRNAME) . '/' . pathinfo($path, PATHINFO_FILENAME);

যদিও আপনি যদি কেবলমাত্র একটি ফাইল নাম ( .somefile.jpg) ব্যবহার করে থাকেন তবে আপনি পাবেন ...

./somefile

এটি কোডপ্যাড.অর্গ.ওয়েজে দেখুন

অথবা একটি রেজেক্স ব্যবহার করুন ...

$withoutExt = preg_replace('/\.' . preg_quote(pathinfo($path, PATHINFO_EXTENSION), '/') . '$/', '', $path);

এটি কোডপ্যাড.অর্গ.ওয়েজে দেখুন

আপনার যদি কোনও পথ না থাকে তবে কেবল একটি ফাইল নাম থাকে তবে এটি কাজ করবে এবং অনেক পরিশ্রমী হবে ...

$withoutExt = pathinfo($path, PATHINFO_FILENAME);

এটি কোডপ্যাড.অর্গ.ওয়েজে দেখুন

অবশ্যই, এই উভয়ই কেবল সর্বশেষ সময়কালের সন্ধান করে ( .)।


সমাধানের শেষ লাইনে উল্লিখিত হিসাবে, এটি ফাইলের মতো জন্য ব্যর্থ হবে.htaccess
ফ্র0zenFyr

8

নিম্নলিখিত কোডটি আমার পক্ষে ভাল কাজ করে এবং এটি খুব ছোট। এটি কেবল ফাইলগুলি বিন্দু দ্বারা বিসর্জনিত একটি অ্যারে হিসাবে বিভক্ত করে, শেষ উপাদানটি (যা অনুমিতিকরূপে এক্সটেনশন) মুছে ফেলে এবং আবার বিন্দুর সাহায্যে অ্যারেটিকে সংস্কার করে।

$filebroken = explode( '.', $filename);
$extension = array_pop($filebroken);
$fileTypeless = implode('.', $filebroken);

ফাইলটি যদি কোনও এক্সটেনশন না থাকে বা ফাইলটি ফাঁকা থাকে তবে তা মিথ্যা প্রত্যাবর্তন করবে.htaccess
টিমো হুভিনেন

5

আমি গুগলে অনেকগুলি উদাহরণ পেয়েছি তবে খারাপ আছে কারণ "" দিয়ে স্ট্রিংয়ের কিছু অংশ সরিয়েছি। "

আসলে এটি করা একেবারে সঠিক জিনিস। এগিয়ে যান এবং এটি ব্যবহার করুন।

ফাইল এক্সটেনশন সর্বশেষ বিন্দুটির পরে সমস্ত কিছু, এবং কোনও ফাইলের বর্ধনের জন্য কোনও নির্দিষ্ট সংখ্যক অক্ষর হওয়ার প্রয়োজন হয় না। এমনকি শুধুমাত্র উইন্ডোজ সম্পর্কে কথা বলার সাথেই এটি ইতিমধ্যে ফাইলের এক্সটেনশনগুলির সাথে আসে যা 3-4 অক্ষরের সাথে খাপ খায় না, যেমন eg .manifest


2
.. .htaccessএবং আসুন ভুলে যাব না এবং .htpasswdঅ্যাপাচি পরিবেশে।
h2ooooooo

5

ব্যবহারের পরামর্শ দিন: pathinfo সাথে PATHINFO_FILENAME

$filename = 'abc_123_filename.html';
$without_extension = pathinfo($filename, PATHINFO_FILENAME);

4

এটি করার কয়েকটি উপায় রয়েছে তবে আমি মনে করি দ্রুততর উপায়গুলির মধ্যে একটিটি নিম্নলিখিত

// $filename has the file name you have under the picture
$temp = explode( '.', $filename );
$ext = array_pop( $temp );
$name = implode( '.', $temp );

আর একটি সমাধান হ'ল এটি। আমি এটি পরীক্ষা করে নিই না, তবে দেখে মনে হচ্ছে এটি কোনও ফাইলনামে একাধিক সময়ের জন্য কাজ করা উচিত

$name = substr($filename, 0, (strlen ($filename)) - (strlen (strrchr($filename,'.'))));

এছাড়াও:

$info = pathinfo( $filename );
$name = $info['filename'];
$ext  = $info['extension'];

// Or in PHP 5.4, i believe this should work
$name = pathinfo( $filename )[ 'filename' ];

এই $nameসবগুলিতে এক্সটেনশন ছাড়াই ফাইলের নাম রয়েছে


4
$image_name = "this-is.file.name.jpg";
$last_dot_index = strrpos($image_name, ".");
$without_extention = substr($image_name, 0, $last_dot_index);

আউটপুট:

this-is.file.name

1
$the_extension = substr($image_name, $last_dot_index, $last_dot_index);ফাইলটির এক্সটেনশন পেতে এটি যুক্ত করুন।
I_ATE_YOUR_WORK_FILES

2

অন্যরা যেমন উল্লেখ করেছেন, নির্দিষ্ট সংখ্যক চরিত্রের মধ্যে এক্সটেনশন সীমাবদ্ধ করার ধারণাটি অবৈধ। অ্যারে_পপ ধারণাটি নিয়ে চলে যাওয়া, অ্যারে হিসাবে সীমানাযুক্ত স্ট্রিংয়ের কথা চিন্তা করে, এই ফাংশনটি আমার পক্ষে দরকারী ...

function string_pop($string, $delimiter){
    $a = explode($delimiter, $string);
    array_pop($a);
    return implode($delimiter, $a);
}

ব্যবহার:

$filename = "pic.of.my.house.jpeg";
$name = string_pop($filename, '.');
echo $name;

আউটপুট:

pic.of.my.house  (note it leaves valid, non-extension "." characters alone)

কর্মে:

http://sandbox.onlinephpfunctions.com/code/5d12a96ea548f696bd097e2986b22de7628314a0


1

আপনি {x,y}অপারেটরটি ব্যবহার করে নিয়মিত প্রকাশের প্যাটার্নটির দৈর্ঘ্য সেট করতে পারেন ।{3,4}পূর্ববর্তী প্যাটার্ন 3 বা 4 বার দেখা দিলে মিলবে।

তবে আমি মনে করি না যে আপনার সত্যই এটি প্রয়োজন। "This.is" নামের একটি ফাইল আপনি কী করবেন?



0

এটি ব্যবহার করার চেষ্টা করুন। এটি অবশ্যই ফাইলের এক্সটেনশন সরিয়ে ফেলবে।

$filename = "image.jpg";
$e = explode(".", $filename);
foreach($e as $key=>$d)
{
if($d!=end($e)
{

$new_d[]=$d; 
}

 }
 echo implode("-",$new_t);  // result would be just the 'image'

আপনি এটিকে অ্যারে_পপ () দিয়ে এক লাইনে হ্রাস করতে পারেন
পিটার ব্র্যান্ড

0

সম্পাদনা : স্মার্টতম পদ্ধতির আইএমএইচও, এটি ফাইলের নাম থেকে শেষ পয়েন্ট এবং নিম্নলিখিত পাঠ্যটি সরিয়ে দেয় (ওরফে এক্সটেনশন):

$name = basename($filename, '.' . end(explode('.', $filename)));

চিয়ার্স;)


এটি কাজ করতে পারার পরে, end()প্যারামিটার হিসাবে পাস হওয়া কোনও ফাংশন নিয়ে কাজ করার কথা নয়। এটি একটি নোটিশও উত্পন্ন করে: কেবল পরিবর্তনশীলগুলি রেফারেন্স দিয়ে পাস করা উচিত
কোডব্রেয়ার

0

এটি যখন এক্সটেনশনের একাধিক অংশ থাকে এবং উভয় স্বল্প এবং দক্ষ হয় তখন এটি কাজ করে:

function removeExt($path)
{
    $basename = basename($path);
    return strpos($basename, '.') === false ? $path : substr($path, 0, - strlen($basename) + strlen(explode('.', $basename)[0]));
}

echo removeExt('https://example.com/file.php');
// https://example.com/file
echo removeExt('https://example.com/file.tar.gz');
// https://example.com/file
echo removeExt('file.tar.gz');
// file
echo removeExt('file');
// file
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.