• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
بازسازی نشانی
#1
درود . جدیدا اینجا شده پاتوق من Big Grin بگذریم Cool
دوستان من می خوام یک فانکشن بسازم واسه بازسازی و تعمیر لینک ها .
فرض کنید که ما دوتا لینک دارم ، یکیش رو base قرار می دیم و اون یکی رو می خوایم بازسازی کنیم . می دونم نفهمیدید چی می گم ، بیشتر توضیح می دم Tongue در واقع من یک فانکشن هوشمند برای بازسازیِ لینک ها می خوام ،‌تا یکجاهایشو تونستم پیش ببرم اما تو بعضی جاهاش گیر کردم .
تا الان من تونستم سه حالت رو پشتیبانی کنم :
1 - لینک هایی که با / شروع می‌شن.
2 - لینک هایی که با ./ شروع می‌شن.
3 - لینک هایی که اولشون با حروف شروع می شه.

این دست پختِ من تا اینجا :
کد پی‌اچ‌پی:
function repair($url,$base){
    
$parse parse_url($url);
    if(!empty(
$parse['host'])){$out $url;}
    elseif(
$url{0} == '/'){$url substr($url,1);$out $base.$url;}
    elseif(
$url{0} == '.' && $url{1} == '/' ){$url substr($url,2);$out 'http://'.domain($base).'/'.$url;}
    else{
$out $base.$url;}
    return 
$out;
}
# echo repair('/post/1','http://test.com/');
# echo repair('post/1','http://test.com/');
# echo repair('./post/1','http://test.com/'); 
این فانکشن تا اینجا بسیار عالی کار کرده Big Grin اما تو سورس یکی از سایت ها دیدم که تو ادامه مطلبش ، لینک رو کامل نداده بود یعنی با / شروع کرده بودDodgy دیدم که فانکشنم دیگه عالی کار نمی کنه Confused
اینا ها اگه میشه خودتون تست کنید :
کد پی‌اچ‌پی:
echo repair('/conteudo/sobre-o-gizmodo-brasil','http://www.gizmodo.com.br/conteudo/exclusivo-novo-galaxy-chega-ao-brasil-no-inicio-de-maio-mas-ele-nao-e-o-s-iii-que-todos-esperam/'); 
دوستان می تونید تو این مورد کمک کنید بد جور به مشکل خوردم Confused در واقع من یک روش می خوام که base رو بهش بدی بعد اگه لینک رو به حالت های مختلف دادی بهش بتونه بازسازی کنه و لینکِ درست رو برگردونه . یعنی میشه Huh
  پاسخ
تشکر شده توسط :
#2
اسپم Dodgy up ! Confused
  پاسخ
تشکر شده توسط :
#3
یه لینک رو می خوای ریپیر کنی ؟
یعنی می خوای چیکارش کنی که ریپیر می شه؟
متغیر url چیه ؟
متغییر base چیه ؟
متغیر out که برگشت داده می شه چیه ؟
  پاسخ
تشکر شده توسط : Reza king_net
#4
(۱۳۹۱ اردیبهشت ۰۳, ۰۸:۰۳ ب.ظ)oia نوشته: یه لینک رو می خوای ریپیر کنی ؟
یعنی می خوای چیکارش کنی که ریپیر می شه؟
متغیر url چیه ؟
متغییر base چیه ؟
متغیر out که برگشت داده می شه چیه ؟
بله
یعنی دو تا ورودی بگیره یکی رو بر اساسِ اون یکی رپیر کنه.
متغیر url لینکی هست که باید ریپیر شه
متغیر base همونیه که متغیرِ url در صورتِ نیاز ازش استفاده می کنه و لینک رو تعمیر می کنه مثال:
کد پی‌اچ‌پی:
$base http://www.google.com/
$url = /mail 
این دوتا متغیر برای ورودی های فانکشن هست حالا کاری که فانکشن میکنه اینه که $url که به صورت ناقص هستش رو به لینکِ صحیح تبدیل می کنه یعنی خروجیش میشه این : http://google.com/mail
تا اینجاش مشکلی نداره یعنی اگر صفحه اول رو به عنوان base قرار بدی به طورِ کامل کار می کنه اما اگه لینکِ صفحه اول نباشه مثله اونی که تو پست اول مثال زدم ، به مشکل می خوره Confused
متغیر out در واقع لینکِ تصحیح شده هستش که در انتها به عنوان خروجیِ تابع استفاده میشه .
  پاسخ
تشکر شده توسط :
#5
خب باید سه حالت رو در نظر بگیری
اگر لینک با http شروع شده باشه که مشخصه خود لینک کامل هست
اگر با / شروع شده باشه فقط باید با دامین به همراه سابدامین بررسی بشه
اگر هم که غیر از اینها بود که باید به لینک اصلی بچسبه
  پاسخ
تشکر شده توسط : king_net
#6
کد پی‌اچ‌پی:
<?PHP

/**
 * create web link
 * this function create new link from domain and path
 * @copyright    iranphp(c)2012
 * @param        $url    string    this is a true url
 * @param        $path    string    this is a new path form domain
 * @return        string    the new link from domain and path
 * @return        bool    flase, if url is not true    
 */
function web_link($url$path)
{
    if(!
is_url($url)){
        return 
false;
    }
    
    
$protocol read_protocol($url);
    
$domain read_domain($url);
    
$path ltrim($path'./');
    
$link $protocol.'://'.$domain.'/'.$path;
    
    return 
$link;


تابعت رو اینجوری پیاده سازی کن.
1. ورودی هات رو چک کن.
2. مقدار دامین رو از url بخون (با استفاده از یه تابع دیگه)
3. لینکت رو بساز.

سه تابع is_url و read_domain و read_protocol رو من پیاده سازی نکردم. مشابهشون زیاده.
  پاسخ
تشکر شده توسط : king_net


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان