ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: ball6847 ที่ 20 กันยายน 2007, 14:47:58



หัวข้อ: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี
เริ่มหัวข้อโดย: ball6847 ที่ 20 กันยายน 2007, 14:47:58
คือผมจะส่งลิ้งค์ที่เป็น dynamic page อ่ะคับ แต่มันดันมีปัญหาคือมันจะตัดตัวอักษรที่อยู่หลังเครื่องหมาย ampersand (&) ออกไปทั้งแถบเลยอ่ะคับ

อย่างเช่น

โค๊ด:
<a href="http://domain.com/?id=1&cat=2">anchor text</a>

ปลายทางจะได้รับแค่นี้คับ

โค๊ด:
<a href="http://domain.com/?id=1

&cat=2">anchor text</a> หายไปเลยอ่ะคับ

ผมจะแก้ยังงัยดีเนี่ย เมื่อวานก่อนก็ไม่ได้นอน มานั่งมั่วแก้ เรื่องเครื่องหมาย Quote กะ PHP mail แทบทั้งคืน มั่วจนแก้ได้

แต่ควาวนี้มืดตึ้บเลยคับ


หัวข้อ: Re: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี
เริ่มหัวข้อโดย: DSci ที่ 20 กันยายน 2007, 16:02:58
ขอดู Source code ตรงที่ส่งข้อความด้วยครับ จะได้วิเคราะห์ได้


หัวข้อ: Re: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี
เริ่มหัวข้อโดย: ball6847 ที่ 20 กันยายน 2007, 16:41:14
อันนี้ function ที่ผมใช้ส่งเมลล์คับ

โค๊ด:

function mail_html($to,$subject,$message){
    $headers  = "MIME-Version: 1.0\n";
    $headers .= "Content-Type: text/html; charset=tis-620\n";
    $headers .= "To: $to\n";
    $headers .= "From: user@domain.com <user@domain.com>\n";

    $subject = str_replace('\"', '"', $subject); //fix quotation mark problem for head and body
    $subject = str_replace("\'", "'", $subject);
    $message = str_replace('\"', '"', $message);
    $message = str_replace("\'", "'", $message);
   
if(mail($to, $subject, $message, $headers)){
return true;
}else{return false;}
}


อันนี้เป็น HTML ที่ผมจะส่งไป ผมจะ assign ค่าโดยใช้ heredoc.syntax น่ะคับ จะได้ไม่ต้องไล่ใส่ escape ให้ยุ่งยากน่ะคับ

โค๊ด:

// heredoc.syntax for easy html variable
$body = <<<HTML
<p>$htmlbody</p>
<a href="http://domain.com/?id=12&cat=34">$anchortext</a>
HTML;


ส่งเมลล์แล้วทุกอย่างปกติ ยกเว้น string ตั้งแต่ ampersand (&) ไป หายเกลี้ยงเลย

ผมต้องจำใจไม่ใส่ลิ้งค์ไปก่อน รอความหวัง เข้าไปหาตามบอร์ด php อย่าง phpfreaks มันดันล่มวันนี้อีก (php error ทั้งหน้าเลย ไม่นึกว่าโปรๆ อย่าง phpfreaks จะพลาดได้เหมือนกัน)


หัวข้อ: Re: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี
เริ่มหัวข้อโดย: EThaiZone ที่ 20 กันยายน 2007, 17:27:05
เคยใช้ phpmailer ยังครับ

เป็นไลบราลี่ตัวหนึ่งอะ ลองค้นพี่กูดู  :P


หัวข้อ: Re: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี
เริ่มหัวข้อโดย: ball6847 ที่ 20 กันยายน 2007, 17:35:31
เคยใช้ phpmailer ยังครับ

เป็นไลบราลี่ตัวหนึ่งอะ ลองค้นพี่กูดู  :P

เหอๆ อยากจะบอกว่า จริงๆ ผมก็ใช้อยู่นะ แต่ว่าตอนที่มันมีปัญหาเรื่อง escaping กะเครื่องหมาย quote ผมเลยลองกลับสู่จุดเดิม คือลองง่ายๆก่อน แล้วมันหาย

phpmailer มีปัญหากะ เครื่้องหมาย ampersand ป่ะคับ เพระตอนที่ผมใช้ ผมใช่แค่ plaintext เองอ่ะ

ถ้าไม่มีปัญหาเด๋วลงใหม่เลย ลองเลยดีกว่ามั้ง ถ้าหายเด่วจะกลับมาขอบคุณ  :-*


หัวข้อ: Re: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี
เริ่มหัวข้อโดย: ball6847 ที่ 20 กันยายน 2007, 18:29:42
เคยใช้ phpmailer ยังครับ

เป็นไลบราลี่ตัวหนึ่งอะ ลองค้นพี่กูดู  :P


เวงกำ กลับมาใช้ phpmailer แล้ว

แก้เรื่อง quote escape ได้แล้ว แต่ ampersand ไม่หาย เศร้า~~  :'(

ผมเลยลองส่งเมลล์แบบปกติ gmail ไป yahoo แบบใส่ & เข้าไปด้วย และก็ลองใส่ลิ้งค์ที่เป็น dynamic url ดู แล้วส่งไป yahoo แล้วลองเปิด view source ดู เห้นว่า yahoo เค้าใช้วิธี เปลี่ยน ampersand ให้เป็น entities
( จาก & เป็น &amp;)

โค๊ด:

http://domain.com/?id=12&amp;cat=123


พอผมลองเปลี่ยนบ้าง มันดันเน่าสนิท
ผมว่ามันต้องมีวิธี escape เครื่องหมาย ampersand ก่อนจะส่งแน่ๆ เลย แต่ผมไม่รู้อ่ะดิว่าจะ escape ยังงัย

เพิ่งจะรู้ว่า เวลาพื้นฐานโปรแกรมมิ่งไม่แม่น แล้วมันเป็นงี้ นี่เอง พื้นฐานนี่มันสำคัญจริงๆ นะ

ว่าแต่ทำมัย phpmailer มันไม่แก้ปัญหามาใน class เลยนะ ต้องให้เรามานั่งแก้เองอีก แต่ก็สะดวกขึ้นแล้วอ่ะนะแค่นี้
หรือว่าจะเอา version ล่าสุดมาลองดูก่อนแก้ดูก่อนนะ ว่าหายป่าว ไม่ค่อยอยากเข้าไปแก้ใน class เลย เด๋วยุ่งไปกันใหญ่  :P


หัวข้อ: Re: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี
เริ่มหัวข้อโดย: EThaiZone ที่ 04 ตุลาคม 2007, 18:55:23
เวลาเหลือน้อย ลองดูนี้ก่อนนะครับ

โค๊ด:
http://th.php.net/htmlentities
http://th.php.net/urlencode

ลองดู ฟังค์ชั่นใกล้เคียง กับความคิดเห็นประกอบไปด้วยนะครับ


หัวข้อ: Re: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี
เริ่มหัวข้อโดย: ball6847 ที่ 04 ตุลาคม 2007, 19:29:17
55 อุตส่าขุดมาตอบให้ ซึ้งน้ำใจน้องโจ้จริงๆ  ไม่รู้ว่ามันจะบังเอิญรึปล่าวนะ แต่ผมปล่อยวางโปรเจ็คนี้ไปพักนึงแล้ว พึ่งกลับมาจับ จะแก้ปัญหานี้ตะกี้นี้นี่เอง พอกลับเข้ามาบอร์ด เจอโพสท์ขึ้นอยู่พอดี ถึงกับซึ้งน้ำใจน้องจิงๆ

เคยลองหาดูจากของฝรั่งแล้วก็ไม่เห็นมันบ่นถึงปัญหานี้กันเลย ส่วนใหญ่มันจะแปลงให้เป็น htmlentities กันก่อน

เดี๋ยวผมจะลองอ่านดู ขอบใจมั่กๆ คับ  :-*


หัวข้อ: Re: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยด&
เริ่มหัวข้อโดย: EThaiZone ที่ 04 ตุลาคม 2007, 20:11:43
55 อุตส่าขุดมาตอบให้ ซึ้งน้ำใจน้องโจ้จริงๆ  ไม่รู้ว่ามันจะบังเอิญรึปล่าวนะ แต่ผมปล่อยวางโปรเจ็คนี้ไปพักนึงแล้ว พึ่งกลับมาจับ จะแก้ปัญหานี้ตะกี้นี้นี่เอง พอกลับเข้ามาบอร์ด เจอโพสท์ขึ้นอยู่พอดี ถึงกับซึ้งน้ำใจน้องจิงๆ

เคยลองหาดูจากของฝรั่งแล้วก็ไม่เห็นมันบ่นถึงปัญหานี้กันเลย ส่วนใหญ่มันจะแปลงให้เป็น htmlentities กันก่อน

เดี๋ยวผมจะลองอ่านดู ขอบใจมั่กๆ คับ  :-*

ลองอ่านในความคิดเห็นของคนอื่นดูนะครับ
มีหลายอันช่วยได้

ผมเองเคยใช้ฟังค์ชั่นนี้ สมัยใช้ php4

มันมีบั๊กอย่างใหญ่คือ

ฟังค์ชั่นปกติมันจะแปลง
< เป็น &lt;
& เป็น &amp;

แต่พอผมแปลง มันแปลงจาก
< เป็น &amp;lt;

อธิบาย คือมันแปลงจาก < เป็น &lt; แล้วดึงเอา & เป็น &amp; อีกที

ตอนหลังผมก็เลยเขียนมาใช้เอง

$ent = array(
   '&'  => '&amp;',
   '>'  => '&gt;',
   '<'  => '&lt;',
   '"'  => '&quot;',
   '\'' => '&apos;',
);
$string = return strtr($string,$ent);

:P