روز برنامه‌نویس مبارک 🤩🎉 از هدایای روز برنامه‌نویس جا نمونی ⌛
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ Mehran Darkaleh
مشکل replace
جامعه پی اچ پی ایجاد شده در ۲۶ شهریور ۱۴۰۱

با سلام و احترام

من قبل از این که این مشکل را مطرح کنم دیدم در قسمت سوالات این قسمت یکی دیگه از دوستان همچین مشکلی داشته ولی متوجه نشدم که خطا از کجا می‌تواند باشه

$pattern = '/^' . str_replace(['/', '{', '}'], ['\\/', '(?<', '>[-%\\w]+)'], '/post/{slug}') . '$/';
var_dump($pattern);

خروجی کد بالا برای من در مرورگر به شکل زیر می‌باشد

string(28) "/^\\/post\\/(?[-%\\w]+)$/" 

که خروجی بالا اشتباه است ولی اگر بجای کاراکتر > از هر کارکتر دیگه برای replace کردن استفاده کنی مشکل حل می‌شود مثلا

$pattern = '/^' . str_replace(['/', '{', '}'], ['\\/', '(?[', '>[-%\\w]+)'], '/post/{slug}') . '$/';
var_dump($pattern);

خروجی کد بالا به شکل زیر می‌باشد

string(28) "/^\\/post\\/(?[slug>[-%\\w]+)$/"

من واقعا هرچی جستجو هم کردم نتوانستم علت این مشکل را پیدا کنم آیا راه حلی به ذهن شما میرسد که بنده را راهنمایی نمایید

یک نکته دیگه این که کد replace اول که مشکل دارد در صورتی که کد را در vscode با اکستنشن code runner اجرا کنی خروجی درست می‌باشد ولی همان کد در مرورگر خروجی متفاوتی دارد

و نکته دیگه این که هردو خروجی string(28) را نشان می‌دهد ولی خروجی اول تعداد کاکتر‌های آن کمتر می‌باشد

سپاس

سلام مهران جان

ببین پاسخ درست رو توی این تاپیک قرار دادم

https://7learn.com/app/topics/10884

اگر میبینی کد توی ترمینال با مرورگر فرق داره مشکل از کد نیست

بررسی کن ببین مشکل از کجای سیستمت هست و دلیلش چیه

توی این ریپازیتوری هم کل پروژه ای که زده شده قرار گرفته که میتونی بررسی و مطالعه کنی

موفق باشید ?

محمد گازری ۲۶ شهریور ۱۴۰۱، ۱۰:۴۹

کار دیگه ای که کردم حتی این یک خط کد را در فایل جدید در htdocs ایجاد کردم ولی باز خروجی مورد نظر را دریافت نکردم بنظر خودت کجا را باید چک کنم برای خودم این خطا عجیب هست .من در سایت زیر هم کد خودم اجرار کردم ولی باز نتیجه مورد نظر را دریافت نکردم

https://www.w3schools.com/php/phptryit.asp?filename=tryphp_compiler

امکانش هست شما هم چک کنید1dda-php-replace.png




Mehran Darkaleh ۲۶ شهریور ۱۴۰۱، ۱۱:۳۹

الان این تیکه کد داره به درستی کار میکنه

$uri = '/category/{topic}/all';
$pattern = '/^' . str_replace(['/', '{', '}'], ['\\/', '(?<', '>[-%\\w]+)'], $uri) . '$/';
$result = preg_match($pattern, '/category/sports/all', $matches);
var_dump($matches);

هم روی ترمینال و هم مرورگر

3a60-Screen Shot 2022-09-17 at 16.39.18.png

4f88-Screen Shot 2022-09-17 at 16.39.44.png

محمد گازری ۲۶ شهریور ۱۴۰۱، ۱۲:۱۱

ممنون از این که وقت گذاشتی

فقط میشه خروجی متغییر pattern را هم ببینی چرا خروجی به شکل زیر می‌باشد

string(38) "/^\\/category\\/(?[-%\\w]+)\\/all$/" 

نمی دانم چرا این قسمت از نوشته topic در نمایش در مرورگر پاک میشه

من رو این قسمت گیر کرده بودم

Mehran Darkaleh ۲۶ شهریور ۱۴۰۱، ۱۲:۱۶

الان خروجی درسته دیگه

6cfb-Screen Shot 2022-09-17 at 16.54.46.png

برای مرورگر هم توی view page source مرورگر چک کنید

بهترین پاسخ
محمد گازری ۲۶ شهریور ۱۴۰۱، ۱۲:۲۵