ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์ProgrammingPHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: PHP mail() แนบลิ้งค์ที่เป็น dynamic page ไม่ได้คับ แก้งัยดี  (อ่าน 1299 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« เมื่อ: 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 แทบทั้งคืน มั่วจนแก้ได้

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

DSci
คนรักเสียว
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 104



ดูรายละเอียด
« ตอบ #1 เมื่อ: 20 กันยายน 2007, 16:02:58 »

ขอดู Source code ตรงที่ส่งข้อความด้วยครับ จะได้วิเคราะห์ได้
บันทึกการเข้า
ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #2 เมื่อ: 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 จะพลาดได้เหมือนกัน)
บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,517



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 20 กันยายน 2007, 17:27:05 »

เคยใช้ phpmailer ยังครับ

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

ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #4 เมื่อ: 20 กันยายน 2007, 17:35:31 »

เคยใช้ phpmailer ยังครับ

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

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

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

ถ้าไม่มีปัญหาเด๋วลงใหม่เลย ลองเลยดีกว่ามั้ง ถ้าหายเด่วจะกลับมาขอบคุณ  Kiss
บันทึกการเข้า

ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #5 เมื่อ: 20 กันยายน 2007, 18:29:42 »

เคยใช้ phpmailer ยังครับ

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


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

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

ผมเลยลองส่งเมลล์แบบปกติ 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 เลย เด๋วยุ่งไปกันใหญ่  Tongue
บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,517



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 04 ตุลาคม 2007, 18:55:23 »

เวลาเหลือน้อย ลองดูนี้ก่อนนะครับ

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

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

ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #7 เมื่อ: 04 ตุลาคม 2007, 19:29:17 »

55 อุตส่าขุดมาตอบให้ ซึ้งน้ำใจน้องโจ้จริงๆ  ไม่รู้ว่ามันจะบังเอิญรึปล่าวนะ แต่ผมปล่อยวางโปรเจ็คนี้ไปพักนึงแล้ว พึ่งกลับมาจับ จะแก้ปัญหานี้ตะกี้นี้นี่เอง พอกลับเข้ามาบอร์ด เจอโพสท์ขึ้นอยู่พอดี ถึงกับซึ้งน้ำใจน้องจิงๆ

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

เดี๋ยวผมจะลองอ่านดู ขอบใจมั่กๆ คับ  Kiss
บันทึกการเข้า

EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,517



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 04 ตุลาคม 2007, 20:11:43 »

55 อุตส่าขุดมาตอบให้ ซึ้งน้ำใจน้องโจ้จริงๆ  ไม่รู้ว่ามันจะบังเอิญรึปล่าวนะ แต่ผมปล่อยวางโปรเจ็คนี้ไปพักนึงแล้ว พึ่งกลับมาจับ จะแก้ปัญหานี้ตะกี้นี้นี่เอง พอกลับเข้ามาบอร์ด เจอโพสท์ขึ้นอยู่พอดี ถึงกับซึ้งน้ำใจน้องจิงๆ

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

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

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

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

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

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

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

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

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

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

Tongue
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์