เปลี่ยน url string เป็น hyper link

เริ่มโดย slimfit, 19 มีนาคม 2012, 15:55:40

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

slimfit

สวัสดีครับทุกท่าน ขอรบกวนเพื่อน ๆ พี่ ๆ ใน thaiseo หน่อยครับ

คือตอนนี้ผมเขียน function ไว้ตัวหนึ่งสำหรับเปลี่ยน url string ไปเป็น link โดยอัตโนมัติ (ใช้ PHP นะครับ)

เช่น ในคอนเทนต์มีดังนี้  

click link http://www.thaiseoboard.com นะครับ
ให้เปลี่ยนเป็น
click link <a href="http://www.thaiseoboard.com">http://www.thaiseoboard.com</a> นะครับ

ผมลองเขียนโค้ดมาส่วนหนึ่งแล้ว (ใช้ Regular expression) แต่มันจะมีปัญหาตรงที่ถ้ามีแท็กอะไรซักอย่างปนอยู่ในคอนเทนต์แล้วดันมี url string อยู่ด้วยมันจะแทนทีเลยเช่น

click link <img src="http://www.thaiseoboard.com/pic1.jpg" /> นะครับ
มันจะเปลี่ยนเป็น
click link <img src="<a href="http://www.thaiseoboard.com/pic1.jpg">http://www.thaiseoboard.com/pic1.jpg</a>" /> นะครับ
ซึ่งไม่ถูกต้องเพราะมันไม่ควรแทนทีลงไป

ที่ผมคิด logic ได้ตอนนี้คือ จะเขียน Regular ยังไงเพื่อบอกว่า ตัวอักษรที่อยู่หน้าลิงค์ต้องไม่เป็น Double Quote หรือ Single Quote แต่ไม่ทราบว่าจะเขียนออกมาเป็น Regular ยังไง

รบกวนด้วยครับ


kobkung

ดักด้วยการเช็คว่า หลังนามสกุลมีอะไรต่อไหม ถ้ามี . ตัวต่อไปไม่ใช่ไฟล์ภาพ jpg , gif , png , bmp ที่เหลือปล่อยให้ link ได้ ไม่ให้ link ก็ดักเพิ่มเข้าไป
ลองดูได้ป่าว คิดสดผิดถูกลองเอง
เราเป็นบริษัท รับทำเว็บไซต์ แก้เว็บเดิม เขียน Php+Mysql+jQuery+css+bootstrap  งานตามสั่ง ประสบการณ์ จะ 19 ปี ละจ้า
[direct=http://www.smilephp.com]Smilephp.com[/direct] รับทำเว็บไซต์บริษัท e-commerce + ระบบชำระเงิน paypal,ธนาคาร  เว็บบริษัท เว็บขายของ ระบบจอง เช่า เขียน PHP ได้ทุกแนว  ช่วงนี้เน้นรับงาน ERP ระบบเอกสารบริษัท ,บัญชี ,  Barcode, Stock , Warehouse , Logistic ติดต่อ 086-364-5262
[direct=http://www.sellerorder.com ระบบหลังบ้าน จัดการ Order ขายของ  ช่วงนี้หาคนทดสอบฟรี ขอได้ตามเมลในเว็บ[/direct]
งดตอบคนทำเว็บนอกลู่นอกทาง ไม่ทำเว็บ WP ปั่นแชร์ เว็บประมูล สคริปปั่นใดๆ ไม่ทำเว็บบอลและพ

slimfit

อ้างถึงจาก: kobkung ใน 20 มีนาคม 2012, 10:35:03
ดักด้วยการเช็คว่า หลังนามสกุลมีอะไรต่อไหม ถ้ามี . ตัวต่อไปไม่ใช่ไฟล์ภาพ jpg , gif , png , bmp ที่เหลือปล่อยให้ link ได้ ไม่ให้ link ก็ดักเพิ่มเข้าไป
ลองดูได้ป่าว คิดสดผิดถูกลองเอง

มีตัวอย่างซักหน่อยมั้ยครับ ผมอ่านแล้วงง ๆ ครับ

kw4nguru

ดักด้วย " ไำด้รึปล่าวครับ  :P

NeoSmith

Replace อักษร " ' < > พวกนี้ ด้วย "" ครับ
ช่วยเหลือผู้ป่วยโรคเอดส์กับทางวัดพระบาทน้ำพุง่ายๆ ด้วยการโทร
1900 222 200
ครั้งละ 15 บาท
รับออกแบบ-เขียนแบบ บ้าน อาคารพานิชย์ อพาร์ทเมนท์ โรงงานฯ โดยทีมวิศวกรผู้ชำนาญงานมากว่า 30 ปี
[direct=http://xn--l3cjbax7b2c3a0dye2b5b5c.com]หาเพื่อน,หาแฟน,หากิ๊ก นัดเพื่อน Line[/direct]

slimfit

#5
ขอบคุณสำหรับคำแนะนำครับ


if(preg_match_all("/https?:\/\/(.*)/",$messages,$matches))
{
    foreach($matches[0] as $key=>$value)
    {
           $replacements = "<a href='".$value."' target='_blank' title='".$value."'>$value</a>";
           $massages = str_replace($value,$replacements,$messages);
    }
}


จะเขียน Regular Expression ยังไงครับ เพื่อบอกว่า หน้า http ต้องห้ามเป็น Single Quote ( ' ) และ Double Quote ( " )

NeoSmith

อ้างถึงจาก: slimfit ใน 22 มีนาคม 2012, 14:20:41
ขอบคุณสำหรับคำแนะนำครับ

if(preg_match_all("/https?:\/\/(.*)/",$messages,$matches))
{
     ............ แทนที่ด้วยลิงค์.............
}


จะเขียน Regular Expression ยังไงครับ เพื่อบอกว่า หน้า http ต้องห้ามเป็น Single Quote ( ' ) และ Double Quote ( " )

ไม่ต้องห้ามหรอกครับ replace Single Quote ( ' ) และ Double Quote ( " ) ด้วย "" ไปเลย ง่ายกว่าครับ
ช่วยเหลือผู้ป่วยโรคเอดส์กับทางวัดพระบาทน้ำพุง่ายๆ ด้วยการโทร
1900 222 200
ครั้งละ 15 บาท
รับออกแบบ-เขียนแบบ บ้าน อาคารพานิชย์ อพาร์ทเมนท์ โรงงานฯ โดยทีมวิศวกรผู้ชำนาญงานมากว่า 30 ปี
[direct=http://xn--l3cjbax7b2c3a0dye2b5b5c.com]หาเพื่อน,หาแฟน,หากิ๊ก นัดเพื่อน Line[/direct]

slimfit

อ้างถึง
ไม่ต้องห้ามหรอกครับ replace Single Quote ( ' ) และ Double Quote ( " ) ด้วย "" ไปเลย ง่ายกว่าครับ

replace ยังไงเหรอครับ (งง)

คือผมต้องการแทนที string ด้วย link (แท็ก a) นะครับ ถ้า replace ไปมันก็ถูกแทนด้วย link อยู่ดีเพราะมันเจอเป็น url string

ผมเข้าใจถูกมั้ยครับ


NeoSmith

อ้างถึงจาก: slimfit ใน 22 มีนาคม 2012, 14:32:16
อ้างถึง
ไม่ต้องห้ามหรอกครับ replace Single Quote ( ' ) และ Double Quote ( " ) ด้วย "" ไปเลย ง่ายกว่าครับ

replace ยังไงเหรอครับ (งง)

คือผมต้องการแทนที string ด้วย link (แท็ก a) นะครับ ถ้า replace ไปมันก็ถูกแทนด้วย link อยู่ดีเพราะมันเจอเป็น url string

ผมเข้าใจถูกมั้ยครับ



ก่อนหน้าที่คุณจะเอามาใส่ tag a คุณก็ควรจะลบ อักขระ ที่ไม่ต้องการออกทั้งหมดก่อนครับ ด้วยการ replace ด้วย ("")
แล้วค่อยเอามา ใส่ tag a ด้วยวิธีการของคุณต่อไป ครับ
ช่วยเหลือผู้ป่วยโรคเอดส์กับทางวัดพระบาทน้ำพุง่ายๆ ด้วยการโทร
1900 222 200
ครั้งละ 15 บาท
รับออกแบบ-เขียนแบบ บ้าน อาคารพานิชย์ อพาร์ทเมนท์ โรงงานฯ โดยทีมวิศวกรผู้ชำนาญงานมากว่า 30 ปี
[direct=http://xn--l3cjbax7b2c3a0dye2b5b5c.com]หาเพื่อน,หาแฟน,หากิ๊ก นัดเพื่อน Line[/direct]

WPDSign

รออ่านด้วยครับ เคยลอง งง จนไม่ได้เขียนต่อ
สร้างบ้าน Modern [direct=https://casa-concept1.com/]แบบบ้านโมเดิร์น[/direct] มาแรง
» ต้องการสร้างบ้านดูแบบบ้านสวยๆ [direct=http://www.architect-bkk.com/แบบบ้านสองชั้น]แบบบ้านสองชั้น[/direct] ทุกสไลต์บริการ[direct=http://www.ideaican.com/]รับสร้างบ้าน[/direct] ใครฝันอย่างสร้างบ้านสไตล์รีสอร์ท มี[direct=https://แบบบ้านสไตล์รีสอร์ท.blogspot.com]แบบบ้านสไตล์รีสอร์ท[/direct]พร้อมก่อสร้าง ลงประกาศขายบ้านที่ [direct=http://www.classified108.com/]ลงประกาศ[/direct]

CMSHostThailand

รอเหมือนกันค่ะ เพราะเคยเช็คที่ domaintools.com แล้ว เป็นแบบนี้ กำลังหาวิธีแก้ไขอยู่พอดีเลยค่ะ รออ่านนะค่ะ


slimfit

คือเข้าใจที่คุณ NeoSmith อธิบายนะครับ แต่มันจะไม่ได้ครับ

คือยังงี้ครับ

สมมุติคอนเทนต์ผมเป็นดังนี้

click link <img src="http://www.thaiseoboard.com/pic1.jpg" /> นะครับ

สมมุติผม Replace Single Quote และ Double Quote มันก็จะเป็น

click link <img src=http://www.thaiseoboard.com/pic1.jpg /> นะครับ

ทีนี้ถ้าผมเขียน Regular เพื่อเปลี่ยนจาก url format เป็น link ก็จะเป็นดังนี้

click link <img src=<a href="http://www.thaiseoboard.com/pic1.jpg">http://www.thaiseoboard.com/pic1.jpg</a> /> นะครับ

ซึ่งมันผิดอะครับ

NeoSmith

โอเคครับ เข้าใจแล้ว ขอคิดก่อน ว่ายังไงดี  :wanwan012: :wanwan012: :wanwan012:
ช่วยเหลือผู้ป่วยโรคเอดส์กับทางวัดพระบาทน้ำพุง่ายๆ ด้วยการโทร
1900 222 200
ครั้งละ 15 บาท
รับออกแบบ-เขียนแบบ บ้าน อาคารพานิชย์ อพาร์ทเมนท์ โรงงานฯ โดยทีมวิศวกรผู้ชำนาญงานมากว่า 30 ปี
[direct=http://xn--l3cjbax7b2c3a0dye2b5b5c.com]หาเพื่อน,หาแฟน,หากิ๊ก นัดเพื่อน Line[/direct]

New2th

_
#13
 :wanwan008:

googlerich

เอาอันนี้ไปใช้ครับ ลองเอาไปปรับปรุงดูนะครับ


<?php

FUNCTION wd_makelink($thisContent){
     
$thisContent TRIM($thisContent);
     
$thisContent HTMLSPECIALCHARS($thisContent);
     
$thisContent PREG_REPLACE('#(.*)\@(.*)\.(.*)#','<a href="mailto:\\1@\\2.\\3">Send email</a>',$thisContent);
     
$thisContent PREG_REPLACE('=([^\s]*)(www.)([^\s]*)=','<a href="http://\\2\\3" target=\'_new\'>\\2\\3</a>',$thisContent);
     RETURN 
$thisContent;
   }
$testContent="ตามฉันมาสิ แล้วฉันจะไปหาเธอคลิกที่ลิงค์นะ http://www.seowatchtools.com/ ลองดูนะ";

 echo 
wd_makelink($testContent);
   
?>





slimfit

#15
ขอบคุณทุกคำแนะนำครับ

โค้ดของคุณ googlerich ใช้ได้เลยครับ ใช้กับ url ภาษาไทยได้ด้วย (เมื่อคืนแก้ได้แต่มีปัญหาเรื่อง url ภาษาไทย  :wanwan023:)  สุดยอดเลยครับท่าน
ผมขออนุญาติแก้นิดหนึ่งนะครับเผื่อท่านอื่นจะนำไปใช้ กรณีที่เรารันบน localhost หรือเป็น ip เช่น http://192.168.0.1/www.thaiseoboard.com/

public function wd_makelink($thisContent)
{
    $thisContent = trim($thisContent);
    $thisContent = htmlspecialchars($thisContent);
    $thisContent = preg_replace('#(.*)\@(.*)\.(.*)#','<a href="mailto:\\1@\\2.\\3">Send email</a>',$thisContent);
    $thisContent = preg_replace('=([^\s]*)(www.)([^\s]*)=','<a href="\\1\\2\\3" target=\'_new\'>\\1\\2\\3</a>',$thisContent);
    return $thisContent;
}


ตัวนี้จะใช้ได้กับ url อย่างเดียวถ้ามีรูปภาพแทรกเข้าไปในคอนเทนต์ด้วยก็จะใช้ไม่ได้เหมือนเดิมครับ เช่น
$testContent="ตามฉันมาสิ แล้วฉันจะไปหาเธอคลิกที่ลิงค์นะ http://www.seowatchtools.com/ ลองดูนะ <img src=\"http://www.xxxx.com/pic1.jpg\" />";

พอจะมีวิธีแก้มั้ยครับ