PDA

View Full Version : سوال: جایگزینی متنی در متنی حاوی کدهای html بدون در نظر گرفتن برخی تگ‌های html



xerror
سه شنبه 21 شهریور 1391, 15:58 عصر
سلام

چگونه می‌توان متنی را در یک متن حاوی کدهای html جستجو کرد به صورتی که برخی تگ های html و محتوایش مثل تگ a یا img را در نظر نگیرد و از آنها گذر کند و در صورتی که با متن تعریف شده مطابقت داشت آن را جایگزین متن دیگری کند.

با تشکر

Hr.Ziggurat
سه شنبه 21 شهریور 1391, 16:03 عصر
سلام ، یه مثال از متن و رشته ای که قراره توش پیدا بشه بزن...

xerror
سه شنبه 21 شهریور 1391, 16:10 عصر
مثلا شما کد html همین صفحه رو در نظر بگیرید بعد "سلام" یا "سلام علیکم" رو توش پیدا کنه و "علی" جایگزین کنه.

ولی من می‌خواهم مثلا وقتی این "سلام" لینک شده بود یا به عنوان خصوصیت title یک تگ img تعریف شده بود کاری بهش نداشته باشه و جایگزین نشه.

Hr.Ziggurat
سه شنبه 21 شهریور 1391, 18:03 عصر
$t = "<html><head></head><body><img title='Salam' />Salam<a href='alakie'>Salam</a></body></html>";
$orgstring = "Salam";
$replacementstring = "Ali";

$o = explode($orgstring,$t);
$output = $o[0];
for($i=1;$i<count($o);$i++){
if(preg_match('/<img *([A-z]|\=)*title *= *(\'|\")$/i',$o[$i]) || preg_match('/<a *([A-z]|\=| |\'|\")*>$/i',$o[$i]))
$output.=$replacementstring.$o[$i];
else
$output.=$orgstring.$o[$i];
}
$output.=$o[count($o)-1];


echo $output;

متغییر t کد html اصلیه ، متغییر orgstring رشته ای که باید جایگزین بشه و replacementstring هم رشته ی که به جای رشته ی اولیه جایگزین میشه.
اگه مشکلی داشت بگو.

Hr.Ziggurat
سه شنبه 21 شهریور 1391, 18:04 عصر
با جاوا اسکریپت هم به همین راحتی میشه این کارو کرد.

xerror
شنبه 25 شهریور 1391, 11:04 صبح
سلام

ممنون برای راهنمایی تون اما چند تا مشکل داره! یکی این که بزرگ و کوچک بودن حروف تاثیری در جستجو نداشته باشد و نکته بعدی که مهم تر هم هست اینه که شاید ما چند رشته رو برای جایگزینی انتخاب کنیم.

برای مثال:

"جوان ایرانی" جایگزین "جوان خوب ایرانی" شود.

ممنون

Hr.Ziggurat
شنبه 25 شهریور 1391, 18:25 عصر
function AnalyseHTML($t,$orgstring,$replacementstring){
$o = spliti($orgstring,$t);
$output = $o[0];
for($i=1;$i<count($o);$i++){
if(!(preg_match('/<img *([A-z]|\=)*title *= *(\'|\")$/i',$o[$i-1]) || preg_match('/<a *([A-z]|\=| |\'|\")*>$/i',$o[$i-1])))
$output.=$replacementstring.$o[$i];
else
$output.=$orgstring.$o[$i];
}
return $output;
}
$html = "<html><head></head><body>Ziggurat<IMG title='Salam' />Salam<a href='alakie'>Salam</a></body></html>";
$a1 = AnalyseHTML($html,"SalAm","Hi Ali");
echo AnalyseHTML($a1,"Ziggurat","HR.Ziggurat");

xerror
یک شنبه 26 شهریور 1391, 09:09 صبح
این تابع spliti توی پی اچ پی ۵ Deprecated شده!

جایگزینی براش وجود نداره؟

Hr.Ziggurat
یک شنبه 26 شهریور 1391, 16:07 عصر
$o = preg_split('/'.$orgstring.'/i',$t);
تو گوگلم پیدا میشد...:اشتباه: