Linux
Reply Return

หัวข้อ : ใครเซียน perl-cgi บ้างครับ เชิญหน่อ

ข้อความว่า
ชื่อ: มิ๊ด
ส่งมาเมื่อวันที่ : 07 กันยายน, 1998 at 17:48:39 [ ด้วย IP : 203.155.134.1 ]
หัวข้อ : ใครเซียน perl-cgi บ้างครับ เชิญหน่อ
ด้วยข้อความที่ว่า:
คือผมไม่เข้าใจตรงที่การตัด string จาก form น่ะครับ
foreace $pair (@pairs) {
($name,$value)=split(/=/,$pair);
$value=~tr/+/ /; #ตรงนี้ไว้ทำอะไรครับ
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($a))/eg; #ตรงนี้ก็ไม่เข้าใจครับ
$FORM{$name}=$value;
}

ผู้ตอบคนที่ 1
ชื่อ: =^o^=
ส่งเมื่อวันที่ : 08 กันยายน, 1998 at 05:48:01 [ ด้วย IP 203.149.5.3 ]
หัวข้อ : Re: ใครเซียน perl-cgi บ้างครับ เชิญหน่อ
ตอบว่า :
บรรทัดแรก ถ้าในตัวแปร value มีเครื่องหมาย + ก็จะเปลี่ยนเป็นช่องว่างแทน

ส่วนบรรทัดที่สอง ตอนที่กด submit จะมีการเปลี่ยนเครื่องหมายบางตัวให้เป็นเลขฐานสิบหกก่อน ถ้าลองพิมพ์ค่าของ query_string ดูจะเห็นว่ามีเครื่องหมาย % และตามด้วยเลขฐานสิบหกสองตัว นั่นแหละ เพราะฉะนั้นจึงต้องมีการเปลี่ยนกลับให้เหมือนเดิม


ผู้ตอบคนที่ 2
ชื่อ: มิ๊ด
ส่งเมื่อวันที่ : 08 กันยายน, 1998 at 10:17:49 [ ด้วย IP 203.155.132.1 ]
หัวข้อ : Re: ใครเซียน perl-cgi บ้างครับ เชิญหน่อ
ตอบว่า :
ขอบคุณครับคุณ=^o^= (อ่านไม่ออก) แต่อยากรู้เพิ่มอีกหน่อยครับว่า
pack("C",hex($a))/eg; เนี่ยมันทำอะไรครับ
ทำไมต้อง "C" แล้ว hex($a) คืออะไรครับ แล้ว eg นี่มันคืออะไรครับ -ขอบคุณครับ @^-^@

ผู้ตอบคนที่ 3
ชื่อ: ตะลอน Net
ส่งเมื่อวันที่ : 18 กันยายน, 1998 at 02:00:39 [ ด้วย IP 202.44.204.35 ]
หัวข้อ : Re: ใครเซียน perl-cgi บ้างครับ เชิญหน่อ
ตอบว่า :
เท่าที่ดูคู่มือมา...

hex() ใช้สำหรับแปลงสตริงของเลขฐานสิบหก เป็นเลขฐานสิบที่สมมูลกับค่าฐานสิบหกในสตริงนั้น ในที่นี้ คาดว่า $a ก็คือค่า pattern ที่ได้จากหลังเครื่องหมายเปอร์เซ็นต์นั่นเอง (คือรหัสฐานสิบหกของอักษร)...
pack() ใช้สำหรับ pack แปลงข้อมูลใน list ให้เป็นข้อมูลตามชนิดที่กำหนด ในที่นี้ "C" หมายถึงข้อมูลชนิด Unsigned char
ส่วน eg ไม่รู้แฮะ...

สรุปแล้ว ทั้งบรรทัดนั้น มันใช้สำหรับตรวจหาส่วนของข้อความสตริงที่อยู่ในรูปของรหัสเลขฐานสิบหกของตัวอักษร แล้วแทนที่ด้วยตัวอักษรที่มีรหัส ASCII ตามนั้น... เนื่องจากว่าโดยปกติอักษรที่มีรหัสเป็น Extended ASCII (ใช้ 8 บิท) จะถูกส่งเป็นรหัสแทน เนื่องจากว่าในการส่งต้องส่งเป็น ASCII 7 บิท ถ้าไม่แปลงมามันก็จะส่งผิดพลาด
ไม่ต้องกังวลหรอกครับ ยังไงคุณก็ต้องใช้อย่างนี้ทั้งบรรทัด อย่าไปแปลงเลย...


ท่านผู้รู้ กรุณาช่วยตอบวิธีแก้ปัญหาให้หน่อยครับ ขอบคุณมากครับ :

ชื่อ :
E-Mail :
หัวข้อ :
ข้อความว่า :