หน้าเว็บ

วันจันทร์ที่ 26 มีนาคม พ.ศ. 2555

หลีกเลี่ยง Single Quote และ Double Quote ใน Attribute Value กันเถอะ

ปกติแล้วเวลาเราบันทึกคอนเทนต์อะไรซักอย่างลงฐานข้อมูลเรียวจะใช้ฟังก์ชั่น addslashes(); เพื่อป้องกัน Error กรณีที่มีการใช้สัญลักษณ์ Single Quote (') หรือ Double Quote (")

เช่น เครื่องเกมขายดีในญี่ปุึ่น "Pokemon Nobunaga's Ambition แชมป์"
เมื่อโยนเข้าฟังก์ชั่น addslashes(); มันจะถูกแปลงเป็น
เครื่องเกมขายดีในญี่ปุึ่น \"Pokemon Nobunaga\'s Ambition แชมป์\"  ให้อัตโนมัติ

ที่นี้ถ้าจะนำออกมาใช้ php จะมีฟังก์ชั่นอยู่ตัวหนึ่งคือ strip_slashes(); ซึ่งจะทำหน้าที่ถ้าเครื่องหมาย \ ออกเพื่อแสดงผลได้อย่างถูกต้องนั่นเอง

ทีนี้ปัญหามันมีอยู่ว่าเมื่อเราเอาประโยคที่ได้จากฟังก์ชั่น strip_slashes(); ไปแสดงใน Attribute Value ของ html นั้นจะเกิดอะไรขึ้นมาดูกัน

ยกตัวอย่าง Tag Input ละกัน

<input type="text" name="textbox1" value="" />  

ทีนี้้ถ้าเกิดนำประโยคที่ได้จากฟังก์ชั่น  strip_slashes(); ไปใส่ใน Value มันจะเป็นดังนี้

<input type="text" name="textbox1" value="เครื่องเกมขายดีในญี่ปุึ่น "Pokemon Nobunaga's Ambition แชมป์"" />  

เห็นมั้ยคะว่าเกิดอะไรขึ้น มันจะผิด Well-Form ของ HTML ไปทันที แถมค่ามันจะขึ้นไม่ครบด้วยเนื่องจากมันถูกปิดด้วย Double Quote หน้าตัว P ใหญ่นั่นเอง

ทีนี้มาดูวิธีแก้กันดีกว่า

$myValue = htmlspecialchars($myValue, ENT_QUOTES, 'utf-8');

เนื่องจากฟังก์ชั่น htmlspecialchars มันจะแทนค่า Character พิเศษที่เราว่าด้วยค่าดังนี้

'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
''' (single quote) becomes '&#039;' only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'

จากนั้นก็นำตัวแปร $myValue ไปใช้ แค่นี้เอง

<input type="text" name="textbox1" value="<?php echo $myVAlue; ?>" />  

ลองดูค่ะ วันนี้ขอตัวแค่นี้ก่อน....ชะแว็บ !!!

ไม่มีความคิดเห็น:

แสดงความคิดเห็น