PDA

View Full Version : گفتگو: تشخیص لینک در متن



djscsi
چهارشنبه 03 مهر 1387, 05:31 صبح
دوستان چه طور مشه در متنی که از database خونده میشه لینکها تشخیص داده بشه و در صورت login نبودن کاربر به جاش بیاد [لاگین شوید] و بقیه به همون صورت نمایش داده بشه؟
ممنون

mdssoft
چهارشنبه 03 مهر 1387, 09:40 صبح
باید از Preg_Replace (http://uk.php.net/preg_replace) استفاده کنید http://www.fileden.com/files/2008/8/6/2037776/smiles/smiles1/006.gif

djscsi
پنج شنبه 04 مهر 1387, 03:26 صبح
ممنون ولی دقیق نفهمیدم مثلا در مورد لینک باید اینو بنویسم؟
$string = 'please login';
$pattern = '<a href=></a>';
$replacement = 'what is this';
echo preg_replace($pattern, $replacement, $string);

mdssoft
پنج شنبه 04 مهر 1387, 06:54 صبح
سلامی دوباره

فکر کنم این تابع مشکل شما رو حل کنه : http://www.fileden.com/files/2008/8/6/2037776/smiles/smiles1/022.gif


<?php
function hyperlink(&$text)
{
// match protocol://address/path/file.extension?some=variable&another=asf%
$text = preg_replace("/\s(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\..-]*
[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))\s/i", " <a href=\"$1\">$3</a> ", $text);

// match www.something.domain/path/file.extension?some=variable&another=asf%
$text = preg_replace("/\s(www\.([a-z][a-z0-9_\..-]*
[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))\s/i", " <a href=\"http://$1\">$2</a> ", $text);

return $text;
}
?>

as13851365
پنج شنبه 04 مهر 1387, 12:00 عصر
دست خوش !
حالا اگه بخوام هر چی کدهای html , javascript در متن وارد شده رو تشخیص بدم و آنها رو داخل یک DIV قرار بدم از چی استفاده کنم ؟

مانند این انجمن که وقتی کدهای جاوااسکریپت رو در متن وارد می کنی و پست می کنی به صورت منظم در صفحه نشان می ده یعنی کدها رو خودش تشخیص می ده و در داخل یک Div قرار می ده !

djscsi
پنج شنبه 04 مهر 1387, 14:50 عصر
ببين من اون تابع رو بايد قبل از echo "<tr><th><center>$row[1]</th></tr></table><br>"; قرار بدم يا بعدش منظورم قبل از $row[1] با بعدش؟
ممنون

$resault=mysql_query("select * from mine1 ");
if(!$resault) echo"cannot connect2";
echo "<td valign=top>";
echo "<table cellspacing=0 cellpadding=2 border=0><tr><td>";//============= asli ==========
for($i=0;$i<=$div;$i++)
{
$row=mysql_fetch_row($resault);
echo "<tr><th><center>$row[1]</th></tr></table><br>";
}

mdssoft
جمعه 05 مهر 1387, 03:41 صبح
دست خوش !
حالا اگه بخوام هر چی کدهای html , javascript در متن وارد شده رو تشخیص بدم و آنها رو داخل یک DIV قرار بدم از چی استفاده کنم ؟

مانند این انجمن که وقتی کدهای جاوااسکریپت رو در متن وارد می کنی و پست می کنی به صورت منظم در صفحه نشان می ده یعنی کدها رو خودش تشخیص می ده و در داخل یک Div قرار می ده !

خوب تا اونجایی که من میدونم این سایت هم برای تشخیص تگ های کد و جاوا از bbcode استفاده میکنه http://www.fileden.com/files/2008/8/6/2037776/smiles/smiles1/005.gif
اما جواب سوال ، این تابع هر چی تگ html ببینه رو داخل یه تگ DIV قرار میده :

function htmlTags($text)
{
$pattern = "/(<[^>]*>)([^<]*)(<\/[^>]*>)/i";
return preg_replace($pattern , " <div>$1$2$3</div> ", $text);
}
برای تشخیص چیزای دیگه خودت سعی کن ، باید مبحث Pattern Syntax رو تو PHP مطالعه کنی . http://www.fileden.com/files/2008/8/6/2037776/smiles/smiles3/116.gif
http://uk3.php.net/reference.pcre.pattern.syntax
http://www.phpbuilder.com/manual/en/reference.pcre.pattern.syntax.php

mdssoft
جمعه 05 مهر 1387, 03:46 صبح
ببين من اون تابع رو بايد قبل از echo "<tr><th><center>$row[1]</th></tr></table><br>"; قرار بدم يا بعدش منظورم قبل از $row[1] با بعدش؟
ممنون

من فکر کنم این مشکل شما رو حل کنه : http://www.fileden.com/files/2008/8/6/2037776/smiles/smiles2/022.gif


echo "<tr><th><center>" . hyperlink($row[1]) . "</th></tr></table><br>";

djscsi
یک شنبه 07 مهر 1387, 14:17 عصر
ممنون ولی مشکل حل نشد اصلا انگار نه انگار که از این تابع استفاده شد دقیقا جمله ها مثل قبل میاد و فرقی نکرده

mdssoft
یک شنبه 07 مهر 1387, 19:08 عصر
با کدوم تابع مشکل دارید ؟ http://www.fileden.com/files/2008/8/6/2037776/smiles/smiles1/013.gif
اسم تابع رو مینوشتید تا بشه سریع جواب رو گفت http://www.fileden.com/files/2008/8/6/2037776/smiles/smiles3/033.gif

djscsi
سه شنبه 09 مهر 1387, 13:34 عصر
echo "<tr><th><center>" . hyperlink($row[1]) . "</th></tr></table><br>";
ممنون دوست عزیز
ببخشید که دیر جواب دادم اخه اینترنت نداشتم من دقیقا این خط رو نوشتم تابع hyperlink هم همانطور که در پست 4 گفتید نوشتم ولی هیج اتفاقی نیفتادممنون میشم اگه خودتون یه بار تست کنید و منو راهنمایی کنید
بازم ممنون

Bahram0110
سه شنبه 09 مهر 1387, 20:27 عصر
پس این همه enter که من زدم کجا رفتن؟؟

mdssoft
سه شنبه 09 مهر 1387, 23:05 عصر
ممنون دوست عزیز
ببخشید که دیر جواب دادم اخه اینترنت نداشتم من دقیقا این خط رو نوشتم تابع hyperlink هم همانطور که در پست 4 گفتید نوشتم ولی هیج اتفاقی نیفتادممنون میشم اگه خودتون یه بار تست کنید و منو راهنمایی کنید
بازم ممنون

شما از این تابع استفاده کنید : http://www.fileden.com/files/2008/8/6/2037776/smiles/smiles3/073.gif


function hyperlink($text)
{
// match protocol://address/path/file.extension?some=variable&another=asf%
return preg_replace("/\s(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\..-]*[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))\s/i", " <a href=\"$1\">$3</a> ", $text);
}

djscsi
پنج شنبه 11 مهر 1387, 12:48 عصر
ممنون بازم ببخشید که دیر جواب دادم
حتما امتحان می کنم
بازم ممنون

djscsi
یک شنبه 28 مهر 1387, 12:43 عصر
mdssoft عزیز اینم هیچ کاری نکرد
راه دیگه ای کسی نداره؟
ببخشید که دیر جواب دادم

djscsi
سه شنبه 30 مهر 1387, 17:36 عصر
کسی چیزی نداشت بگه؟

djscsi
یک شنبه 05 آبان 1387, 18:55 عصر
ببینم کسی تا حالا این کارو نکرده که بتونه به من کمک کنه؟

as13851365
دوشنبه 06 آبان 1387, 09:00 صبح
من یکی که نه !

ولی فکر کنم اگر کمی با پارامتر های دستور preg_replace کار کنی به جواب می رسی !

من یکی که تاحالا از این جور چیز ها استفاده نکردم ( بلد نیستم ! ) ولی اگر یکی از دوستان درباره پارامترهای این دستور توضیح بده ممنون می شم !

مثلا این ("/\s(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\..-]*[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))\s/i") رو چطوری بنویسم ؟ الگوریتمی داره بگید ؟ مقاله ای لینکی اگر در این باره دارید بدید ممنون می شم ! ( من که نفهمیدم این همه علامت چه کار می کنند اگر یکی از دوستان کمک کنه ممنون می شم )

farshad_persia
دوشنبه 06 آبان 1387, 14:38 عصر
قربون دهنت داداش منم میخواستم همینو بگم

sama01
سه شنبه 07 آبان 1387, 10:52 صبح
مثلا این ("/\s(([a-zA-Z]+:\/\/)([a-z][a-z0-9_\..-]*[a-z]{2,6})([a-zA-Z0-9\/*-?&%]*))\s/i") رو چطوری بنویسم ؟ الگوریتمی داره بگید ؟ مقاله ای لینکی اگر در این باره دارید بدید ممنون می شم ! ( من که نفهمیدم این همه علامت چه کار می کنند اگر یکی از دوستان کمک کنه ممنون می شم )من هم دقیق بلد نیستم. چون تا حالا نیاز بهش پیدا نکردم. هر وقت هم لازم داشتم، کدهاش روی وب بوده و من فقط کپی کردم.
ولی یک مطلب خیلی خوب در ویکیپدیا وجود داره. توصیه می‌کنم حتما ازش استفاده کنید. به نظر می‌رسه خیلی کامل باشه.
به این عبارت‌ها، عبارت‌های با قاعده یا Regular expression می‌گویند. هم می‌تونی یک جستجو در وب بکنید و هم در این آدرس از ویکی پدیا در موردش اطلاعات بگیرید:


Regular expression - (http://en.wikipedia.org/wiki/Regular_expression)Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Regular_expression)

djscsi
یک شنبه 19 آبان 1387, 11:28 صبح
دوستان من هنوز مشکلم حل نشده
پس این همه سایت ایرانی که این کارو میکنند چه طوری؟

yaqubian
یک شنبه 19 آبان 1387, 12:11 عصر
دوست عزیز
فکر می کنم تنها راهش استفاده از regular expression باشه.
موفق باشید

djscsi
یک شنبه 26 آبان 1387, 17:51 عصر
ممنون ولی فکر کنم اینها کل متن رو میگیرن و مقایسه میکنند در حالی متن من همش لینک نیست باید یه چیزی باشه که لینک رو تو متن تشخیص بده و اون رو replace کنه
ممنون اگه کسی چیز دیگه ای داشت ممنون میشم کمک کنه

yaqubian
یک شنبه 26 آبان 1387, 22:23 عصر
دوست عزیز
همونطور که گفتم راه حلش همون عبارات باقاعده است.
http://ir.php.net/manual/en/function.preg-replace.php
این رو یه نیگاه بندازین.
موفق باشید

eAmin
سه شنبه 28 آبان 1387, 18:54 عصر
سلام.

این رو من با یکم تغییر ایجاد کردم، به احتمال زیاد جواب می ده، خودت می تونی به یه تابع تبدیلش کنی:

$url = "http://www.site.com/index.php?name=eAmin&lastname=Amin ilyiffufu
https://www.site.net/";
$regexp = "/((https?:\/\/)(\w*)?[\w-.]+(\/([\w\/.]*(\?\S+)?)?)?)/im";

echo preg_replace($regexp, "<a href=\"$1\">$1</a><br />", $url);

djscsi
شنبه 02 آذر 1387, 11:18 صبح
ممنون از توجه دوستان امتحان میکنم میگم

djscsi
یک شنبه 10 آذر 1387, 11:50 صبح
امین جان یه مشکلی هست شما url رو خودت دادی ولی برا من باید خودش تشخیص بده و داخل یه متن هست درست مثل فرومها

yaqubian
یک شنبه 10 آذر 1387, 13:40 عصر
دوست عزیز
خب بجای اون رشته حاوی url متغیرتون رو قرار بدید.
موفق باشید

djscsi
یک شنبه 10 آذر 1387, 18:55 عصر
منم همین کارو کردم
فکر کنم بهتر باشه از نتیجه کار عکس بزارم
http://i35.tinypic.com/2quhd7q.jpg

djscsi
یک شنبه 24 آذر 1387, 19:15 عصر
$url = "http://www.site.com/index.php?name=eAmin&lastname=Amin ilyiffufu
https://www.site.net/";
$regexp = "/((https?:\/\/)(\w*)?[\w-.]+(\/([\w\/.]*(\?\S+)?)?)?)/im";

echo preg_replace($regexp, "<a href=\"$1\">$1</a><br />", $url);
ممنون این کمکم کرد فقط نیاز به تغییری داره که شما بلدید کمک کنید اونم تواین قسمت هست

<a href=\"$1\">$1</a><br />"
نباید با این مقایسه بشه باید با یه چیزه اینجوری مقایسه کنه ممنون میشم کمکم کنید
<a href=نام سایت . دامنه>عنوان لینک</a>

eAmin
دوشنبه 25 آذر 1387, 19:40 عصر
ممنون این کمکم کرد فقط نیاز به تغییری داره که شما بلدید کمک کنید اونم تواین قسمت هست

نباید با این مقایسه بشه باید با یه چیزه اینجوری مقایسه کنه ممنون میشم کمکم کنید
<a href=نام سایت . دامنه>عنوان لینک</a>

$text = "<a href='http://www.site.com/index.php?name=eAmin&lastname=Amin'> ilyiffufu</a>
<a href='https://www.site.net/'>eAmin 2</a>";
$pre = "/((https?:\/\/)(\w*)?[\w-.]+(\/([\w\/.]*(\?\S+)?)?)?)>(.*?)<\/a>$/im";

echo preg_replace($pre, "<a href=\"$1\">$2</a><br />", $text);

djscsi
دوشنبه 25 آذر 1387, 20:03 عصر
ممنون دوست عزیز امتحان میکنم ببینم چی میشه

djscsi
پنج شنبه 28 آذر 1387, 21:28 عصر
امین جان این جواب نداد
لینک رو کامل نشون داد
کسی چیزه دیگه ای نداره؟
ممنون

اعظم
جمعه 29 آذر 1387, 11:56 صبح
$cadena='<a href="http://www.google.com.">Google</a><br>This is a test';

$patron='/\<a href\=(.*?)\>(.*?)\<\/a\>/is';
$replace_word = '<font color=red>You should login</font>';

echo $cadena."<br><br>";


echo preg_replace($patron, $replace_word,$cadena);

djscsi
شنبه 30 آذر 1387, 12:48 عصر
ممنون امتحان می کنم میگم

parsajax
سه شنبه 10 دی 1387, 06:48 صبح
<?php

$str='cadena=<a href="http://www.google.com.">Google</a><br>This is a test;';
$str=preg_replace('/\<a(.*?)\<\/a\>/si', '<b>جهت مشاهده لينك عضو شويد</b>', $str);
echo $str;

?>