PDA

View Full Version : تابع str_replace رو شرطی کنم



olampiad
شنبه 23 بهمن 1400, 12:54 عصر
سلام و خسته نباشید
ممنون از همه دوستان عزیز
من یه محتوایی رو از ckeditor میگیرم و میخوام با php روی لینک هاش تغییرات بدم به صورت زیر .
میخوام
به تگ های a (آنهایی که href شون بغیر از https:iranianstone.com میباشد) پراپرتی "rel="nofollow اضافه کنم.
کلیتش به این شکل میباشد

من برای این کار کد پایین رو نوشتم
ولی کد پایین خیلی کلی هستش و شرط رو اجرا نمیکنه
کد من لینک هارو نو فالو میکنه ولی نمیتونه تشخیص بده که کدوم لینک هارو نو فالو کنه.



$one=str_replace('<a ','<a rel="nofollow" ',$_POST['comments']); $_POST['comments']=$one;


دوستان عزیز
من یه کوچولو تازه کار هستم
به نظرتون چطوری و با چه توابعی میتونم این کد و این شرط رو پیاده کنم.
یک دنیا ممنون از لطف و محبت شما

plague
یک شنبه 24 بهمن 1400, 19:40 عصر
سلام
راه زیاد هست میتونی از کتابخونه ای مثل phpquery استفاده کنی که شبی به jquery هست برای php و کار باهاش سادست
یا اگه نمیخای کتابخونه خارجی استفاده کنی کلاس domdocument هست برای php که اونم همینکارو میکنه ولی یکم سخت تره این یه نمونه که دقیقا اون کاری که شما میخای رو انجام نمیده ولی نزدیکه


https://stackoverflow.com/a/11235611/5796284


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




$tags = explode('<a ' , $html ) ;
foreach($tags as $k=>$v )
{
if(strpos( $v , 'href="https:iranianstone.com"' ) !== false ) continue ;
$tags[$k] = str_replace('href','rel="nofollow" href' , $v );
}
$html = implode('<a ' , $tags);

olampiad
دوشنبه 25 بهمن 1400, 15:40 عصر
دوست عزیز یک دنیا ممنون از لطف و محبت شما
واقعا ممنون بابت این کدتون
با اجازتون من کد شمارو تو برنامه اجرا کردم



$html='<a href="iranianstone.com"> یک </a><br> <a href="gsdfgdf"> دو </a><br> <a href="iranianstone.com/s"> سه </a> <br> <a href="dfgsdffgdf"> چهار </a> <br> <a href="iranianstone.com/s"> پنج </a>';
$tags = explode('<a ' , $html ) ;foreach($tags as $k=>$v ){ if(strpos( $v , 'href="https:iranianstone.com"' ) !== false ) continue ; $tags[$k] = str_replace('href','rel="nofollow" href' , $v );}$html = implode('<a ' , $tags);
echo $html;

وقتی که کد شمارو اجرا کردم
همه ی لینک ها به طور اتومات nofollow شدن
دقیقا به صورت زیر
یعنی شرط اجرا نشد
ببخشین که وقتتون رو میگیرم.
به نظرتون چه تغییراتی ایجاد کنیم تا شرط اجرا بشه



<a rel="nofollow" href="iranianstone.com"> یک </a><br> <a rel="nofollow" href="gsdfgdf"> دو </a><br> <a rel="nofollow" href="iranianstone.com/s"> سه </a> <br> <a rel="nofollow" href="dfgsdffgdf"> چهار </a> <br> <a rel="nofollow" href="iranianstone.com/s"> پنج </a>

plague
دوشنبه 25 بهمن 1400, 16:30 عصر
ای قسمت



if(strpos( $v , 'href="https:iranianstone.com"' ) !== false ) continue ;

بجای https:iranianstone.com که مشخصا اشتباه هست باید href درست رو بزاری که نمیخای بگیره ... من این رو توی کد گزاشتم چون شما این رو قید کرده بودین تو سوالتون



به تگ های a (آنهایی که href شون بغیر از https:iranianstone.com میباشد) پراپرتی "rel="nofollow اضافه کنم.



طبق کدی که شما گزاشتی


href="iranianstone.com"

هستش نه



href="https:iranianstone.com"

olampiad
چهارشنبه 27 بهمن 1400, 16:26 عصر
به دقیقا
من طبق کد شما پیش رفتم و کار کرد
یک دنیا ممون از این کد زیبا
یه زحمت دیگه ای عزیز

کد شما طوری عمل میکنه که داخل href حتما باید
iranianstone.com باشه
آیا این امکان وجود داره که بگیم حتما نباید کپی
iranianstone.com باشه و با
iranianstone.com شروع بشه و بعدش به هرچی ختم میشه بشه .
مثلا طوری بشه که iranianstone.com/gallery/allgal رو هم مد نظر بگیره چون با
iranianstone.com شروع میشه.
یک دنیا ممنون از وقتی که میزارین

plague
چهارشنبه 27 بهمن 1400, 16:53 عصر
اینو بنویس دیگه نه به اولش کار داره نه آخرش



strpos( $v , 'iranianstone.com' )