StepCoding

Encoding HTML document

อ่าน [1797] หมวดหมู่: Encoding และ Escaping

อักขระพิเศษต่าง ๆ ใน HTML จะอยู่ในรูปแบบ entity เช่น &s และ < ซึ่งใน PHP จะแบ่งออกเป็น 2 ฟังก์ชันที่แปลงอักขระพิเศษไปเป็น entity เหล่านั้น 1 ฟังก์ชันสำหรับ remove HTML tags และ 1 ฟังก์ชันสำหรับดึงค่าใน meta tags

Entity-quoting อักขระพิเศษทุกตัว

ฟังก์ชัน htmlentities() จะทำการเปลี่ยนอักขระพิเศษทุกตัวไปเป็น entity (ยกเว้นช่องว่าง) เช่น เครื่องหมายน้อยกว่า (<) เครื่องหมายมากกว่า (>) ampersand (&) เป็นต้น

<?php
$string = htmlentities("2 < 3 and 3 > 1");
echo $string;
// 2 &lt; 3 and 3 &gt; 1
?>

จะเห็นว่ามันจะไม่ทำการแปลงช่องว่าง (space) ไปเป็นอักขระ &nbsp; แต่จะทำการแปลงอักขระพิเศษอื่น ๆ เช่น <, >, & ให้อยู่ในรูปแบบ entity หมด เราไปดูกันครับว่าฟังก์ชัน htmlentities() มีรูปแบบการใช้งานอย่างไร

# รูปแบบ
$output = htmlentities(input, quote_style, charset);

ในพารามิเตอร์ตัวที่ 3 ก็คือการกำหนด charset ให้มัน ถ้าไม่กำหนดค่า default จะเป็น "ISO-8859-1" ส่วนในพารามิเตอร์ตัวที่ 2 ก็คือส่วนของการกำหนด quote_style ซึ่งเป็นการกำหนดว่าเราต้องการให้มันแปลงอักขระ quote แบบไหนบ้าง โดยค่า default ของมัน (ENT_COMPAT) จะเป็นการแปลงเฉพาะ double quotes เท่านั้น แต่ถ้าเราต้องการให้มันแปลงทั้ง single quotes และ double quotes จะต้องกำหนดเป็น ENT_QUOTES แต่ถ้าไม่ต้องการให้มันแปลงทั้งสองอย่างเลยให้กำหนดเป็น ENT_NOQUOTES เช่น

<?php
$input = <<< End
"Stop pulling my hair!" Jane's eyes flashed.<p>
End;

$double = htmlentities($input);
// &quot;Stop pulling my hair!&quot; Jane's eyes flashed.&lt;p&gt;

$both = htmlentities($input, ENT_QUOTES);
// &quot;Stop pulling my hair!&quot; Jane&#039;s eyes flashed.&lt;p&gt;

$neither = htmlentities($input, ENT_NOQUOTES);
// "Stop pulling my hair!" Jane's eyes flashed.&lt;p&gt;
?>
Entity-quoting เฉพาะอักขระ HTML syntax

ฟังก์ชัน htmlspecialchars() จะทำการแปลงอักขระในชุดของ entity ที่เล็กที่สุด (เล็กกว่าการแปลงโดยใช้ฟังก์ชัน htmlentities()) ซึ่งประกอบไปด้วย

  • Ampersands (&) จะแปลงเป็น &amp;
  • Double quotes (") ถูกแปลงเป็น &quot;
  • Single quotes (') ถูกแปลงเป็น &#039; (ถ้าเรากำหนดเป็นแบบ ENT_QUOTES เหมือนกับการใช้ในฟังก์ชัน htmlentities())
  • Less-than signs (<) ถูกแปลงเป็น &lt;
  • Greater-than signs (>) ถูกแปลงเป็น &gt;

เราไปดูรูปแบบการใช้งานฟังก์ชัน htmlspecialchars() กันครับ ซึ่งมีลักษณะคล้าย ๆ กับฟังก์ชัน htmlentities()

# รูปแบบ
$output = htmlspecialchars(input, [quote style, [charset]]);

ผู้สนับสนุน