สัญลักษณ์ PHP อักขระและสตริง ไวยากรณ์ Heredoc ใน PHP

( PHP 4, PHP 5, PHP 7)

htmlอักขระพิเศษ — แปลงอักขระพิเศษเป็นเอนทิตี HTML

คำอธิบาย

สตริง htmlอักขระพิเศษ (สตริง $สตริง [, int $flags = ENT_COMPAT | ENT_HTML401 [, สตริง $encoding = ini_get("default_charset") [, บูล $double_encode = จริง ]]])

ใน HTML อักขระบางตัวมีความหมายพิเศษและต้องแสดงเป็นเอนทิตี HTML เพื่อรักษาความหมายไว้ ฟังก์ชันนี้จะส่งคืนสตริงที่ผ่านการแปลงเหล่านี้ หากคุณต้องการแปลงเอนทิตีที่เป็นไปได้ทั้งหมด ให้ใช้.

htmlentities() ฟังก์ชันนี้จะส่งคืนสตริงที่ผ่านการแปลงเหล่านี้ หากคุณต้องการแปลงเอนทิตีที่เป็นไปได้ทั้งหมด ให้ใช้หากสตริงอินพุตส่งผ่านไปยังฟังก์ชันนี้และเอกสารผลลัพธ์ใช้การเข้ารหัสอักขระเดียวกัน ฟังก์ชันนี้ก็เพียงพอที่จะเตรียมข้อมูลสำหรับการแทรกลงในส่วนใหญ่ของเอกสาร HTML อย่างไรก็ตาม หากข้อมูลมีอักขระที่ไม่ได้กำหนดไว้ในการเข้ารหัสอักขระของเอกสารผลลัพธ์ และคุณคาดหวังว่าอักขระเหล่านั้นจะถูกจัดเก็บ (เป็นตัวเลขหรือเอนทิตีที่มีชื่อ) ดังนั้นสิ่งนี้และ ฟังก์ชั่น (ซึ่งแปลงสตริงย่อยด้วยเอนทิตีที่เกี่ยวข้องเท่านั้น).

มีความจำเป็นต้องใช้ฟังก์ชัน

  • mb_encode_numericentity()
  • มีการทำการเปลี่ยนแปลงต่อไปนี้: "&" (เครื่องหมายแอมเพอร์แซนด์) ถูกแปลงเป็น "&"""" (เครื่องหมายคำพูดคู่) จะถูกแปลงเป็น """ ในโหมด
  • ENT_NOQUOTES ไม่ได้ตั้งค่า.
  • "<" (знак "меньше чем") преобразуется в "<"
  • """ (เครื่องหมายคำพูดเดี่ยว) จะถูกแปลงเป็น """ (หรือ ") ในโหมดเท่านั้น

ENT_QUOTES

">" (มากกว่าเครื่องหมาย) จะถูกแปลงเป็น ">" รายการพารามิเตอร์).

สตริงที่จะแปลง ( เชือก.

บิตมาสก์ของแฟล็กต่อไปนี้ซึ่งกำหนดโหมดการประมวลผลใบเสนอราคา การเข้ารหัสที่ไม่ถูกต้อง และประเภทเอกสารที่ใช้ ค่าเริ่มต้นคือ
ENT_COMPAT | ENT_HTML401 ค่าพารามิเตอร์แฟล็กที่มีอยู่
ชื่อคงที่ คำอธิบาย
ไม่ได้ตั้งค่า ENT_COMPAT
"&" (เครื่องหมายแอมเพอร์แซนด์) ถูกแปลงเป็น "&" แปลงเครื่องหมายคำพูดคู่ โดยปล่อยให้เครื่องหมายคำพูดเดี่ยวไม่เปลี่ยนแปลง
แปลงทั้งเครื่องหมายคำพูดคู่และเดี่ยว ปล่อยให้ทั้งเครื่องหมายคำพูดคู่และเดี่ยวไม่เปลี่ยนแปลง
ENT_ละเว้น หากไม่มีข้อความแจ้งเตือน ให้ละทิ้งลำดับรหัสที่ไม่ถูกต้องแทนที่จะส่งคืนสตริงว่าง
ไม่แนะนำให้ใช้แฟล็กนี้ เนื่องจากอาจทำให้เกิดผลเสียต่อความปลอดภัย แทนที่รหัสอักขระที่ไม่ถูกต้องสำหรับประเภทเอกสารที่กำหนดด้วยอักขระแทนที่ Unicode U+FFFD (UTF-8) หรือ FFFD
(เมื่อใช้การเข้ารหัสอื่น) แทนที่จะปล่อยให้ทุกอย่างเหมือนเดิม สิ่งนี้อาจมีประโยชน์ เช่น เพื่อให้แน่ใจว่าเอกสาร XML ที่มีเนื้อหาภายนอกที่ฝังไว้นั้นถูกต้องอย่างเป็นทางการ ENT_HTML401
การประมวลผลโค้ดตาม HTML 4.01 ENT_XML1
การประมวลผลโค้ดตาม XML 1 ENT_XHTML
การประมวลผลโค้ดตาม XHTML ENT_HTML5
การประมวลผลโค้ดตาม HTML 5

การเข้ารหัส

อาร์กิวเมนต์เผื่อเลือกที่ระบุการเข้ารหัสที่ใช้เมื่อแปลงอักขระ หากไม่ได้ระบุ ค่าเริ่มต้นสำหรับการเข้ารหัสจะขึ้นอยู่กับเวอร์ชันของ PHP ที่ใช้งาน ใน PHP 5.6 และเก่ากว่า ค่าเริ่มต้นจะถูกตั้งค่าเป็นตัวเลือกการกำหนดค่า default_charsetใน PHP 5.4 และ 5.5 จะใช้ UTF-8.

ค่าเริ่มต้น. การใช้ PHP เวอร์ชันก่อนหน้า

ISO-8859-1 UTF-8, แม้ว่าอาร์กิวเมนต์นี้จะเป็นทางเลือกในทางเทคนิค แต่ขอแนะนำอย่างยิ่งให้คุณระบุค่าที่ถูกต้องสำหรับโค้ดของคุณ หากคุณใช้ PHP 5.5 ขึ้นไป หรือหากตัวเลือกการกำหนดค่า default_charset ของคุณอาจตั้งค่าไม่ถูกต้องสำหรับอินพุต, หากไม่ได้ระบุ ค่าเริ่มต้นสำหรับการเข้ารหัสจะขึ้นอยู่กับเวอร์ชันของ PHP ที่ใช้งาน ใน PHP 5.6 และเก่ากว่า ค่าเริ่มต้นจะถูกตั้งค่าเป็นตัวเลือกการกำหนดค่า default_charset, เพื่อวัตถุประสงค์ของฟังก์ชันการเข้ารหัสนี้, ISO-8859-15, ซีพี866ซีพี1251 ซีพี1252และ KOI8-Rเทียบเท่ากันในทางปฏิบัติ โดยสมมติว่าสตริงนั้นมีอักขระที่ถูกต้องในการเข้ารหัสที่ระบุ จากนั้นอักขระจะถูกแก้ไข

htmlอักขระพิเศษ()

จะยังคงอยู่ในตำแหน่งเดิมในการเข้ารหัสเหล่านี้ทั้งหมด
รองรับการเข้ารหัสต่อไปนี้: การเข้ารหัสที่รองรับ ค่าพารามิเตอร์แฟล็กที่มีอยู่
UTF-8 การเข้ารหัส ชื่อเล่น
ISO8859-1 ละตินยุโรปตะวันตก-1 ISO-8859-5
แม้ว่าอาร์กิวเมนต์นี้จะเป็นทางเลือกในทางเทคนิค แต่ขอแนะนำอย่างยิ่งให้คุณระบุค่าที่ถูกต้องสำหรับโค้ดของคุณ หากคุณใช้ PHP 5.5 ขึ้นไป หรือหากตัวเลือกการกำหนดค่า default_charset ของคุณอาจตั้งค่าไม่ถูกต้องสำหรับอินพุต ISO8859-5 การเข้ารหัสซีริลลิกที่ไม่ค่อยได้ใช้ (ละติน/ซีริลลิก)
หากไม่ได้ระบุ ค่าเริ่มต้นสำหรับการเข้ารหัสจะขึ้นอยู่กับเวอร์ชันของ PHP ที่ใช้งาน ใน PHP 5.6 และเก่ากว่า ค่าเริ่มต้นจะถูกตั้งค่าเป็นตัวเลือกการกำหนดค่า default_charset ISO8859-15
เพื่อวัตถุประสงค์ของฟังก์ชันการเข้ารหัสนี้ ละตินยุโรปตะวันตก-9 เพิ่มเครื่องหมายยูโร ตัวอักษรภาษาฝรั่งเศสและฟินแลนด์ในการเข้ารหัส Latin-1 (ISO-8859-1) ยูนิโค้ด 8 บิต รองรับ ASCII
ISO-8859-15 ไอบีเอ็ม866, 866 การเข้ารหัส Cyrillic ที่ใช้ใน DOS
ซีพี866 วินโดวส์-1251, วิน-1251, 1251 การเข้ารหัส Cyrillic ที่ใช้ใน Windows
ซีพี1252 วินโดวส์-1252, 1252 การเข้ารหัสแบบยุโรปตะวันตกที่ใช้ใน Windows
koi8-ru, koi8r 950 การเข้ารหัสภาษารัสเซีย
บิ๊ก5 936 ภาษาจีนตัวเต็ม ใช้ในไต้หวันเป็นหลัก
GB2312 ชุดอักขระประจำชาติแบบจีนตัวย่อ
BIG5-HKSCS Extended Big5 ใช้ในฮ่องกง Shift_JIS
SJIS, SJIS-win, cp932, 932 การเข้ารหัสภาษาญี่ปุ่น Shift_JIS
EUC-JP EUCJP, eucJP-ชนะ
"" บรรทัดว่างเปิดใช้งานโหมดสำหรับกำหนดการเข้ารหัสจากไฟล์สคริปต์ (Zend multibyte), default_charset และภาษาปัจจุบัน (ดู nl_langinfo()ซีพี1251 กำหนดสถานที่()) ตามลำดับที่แสดง

ไม่แนะนำให้ใช้: ความคิดเห็น

ไม่รองรับการเข้ารหัสอื่นๆ จะใช้การเข้ารหัสเริ่มต้นแทนและจะมีการสร้างคำเตือน

double_encode

หากปิดใช้งานตัวเลือก double_encode PHP จะไม่แปลงเอนทิตี html ที่มีอยู่ ตามค่าเริ่มต้น ทุกอย่างจะถูกแปลงโดยไม่มีข้อจำกัด

สตริงใน PHP คือชุดอักขระที่มีความยาวเท่าใดก็ได้ ต่างจาก C ตรงที่สตริงสามารถมีอักขระว่างได้ ซึ่งจะไม่ส่งผลกระทบต่อโปรแกรม แต่อย่างใด กล่าวอีกนัยหนึ่ง สตริงสามารถใช้เพื่อเก็บข้อมูลไบนารีได้ ความยาวของสตริงถูกจำกัดด้วยจำนวน RAM ที่ว่างเท่านั้น ใน PHP อักขระจะเหมือนกับไบต์ ซึ่งหมายความว่าสามารถมีอักขระที่แตกต่างกันได้ 256 ตัว นอกจากนี้ยังหมายความว่า PHP ไม่รองรับ Unicode ดั้งเดิม ฟังก์ชันบางอย่างรองรับ Unicode บางอย่าง utf8_encode() และ .

utf8_decode()

สตริงสามารถประมวลผลได้อย่างง่ายดายโดยใช้ฟังก์ชันมาตรฐาน และคุณยังสามารถเข้าถึงอักขระใดๆ ก็ได้โดยตรงอีกด้วย

ตัวอย่างง่ายๆ ของตัวแปรสตริง: $a=;
"เป็นเพียงข้อความที่เก็บไว้ในตัวแปรสตริง" เสียงสะท้อน $a ;
?>

//Outputs "นี่เป็นเพียงข้อความที่เขียนไปยังตัวแปรสตริง" รายการพารามิเตอร์.

ตอนนี้เรามาดูไวยากรณ์ประเภทข้อมูลโดยละเอียด

ไวยากรณ์ของประเภทสตริง

สตริงสามารถกำหนดได้สามวิธี " ).

วิธีที่ง่ายที่สุดในการกำหนดสตริงคือการใส่เครื่องหมายคำพูดเดี่ยว (อักขระ \ หากต้องการใช้เครื่องหมายคำพูดเดี่ยวภายในสตริง เช่นเดียวกับในภาษาอื่นๆ จำนวนมาก จะต้องนำหน้าด้วยอักขระแบ็กสแลช (

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

กำลังดำเนินการอยู่

นี่คือตัวอย่างการใช้เครื่องหมายคำพูดเดี่ยว: เสียงสะท้อน;

"นี่คือสตริงง่ายๆ" เอคโค่
“คุณยังสามารถแทรกลงในบรรทัดได้
อักขระขึ้นบรรทัดใหม่ดังนั้น
;

เพราะมันเป็นเรื่องปกติ"
นี่คือตัวอย่างการใช้เครื่องหมายคำพูดเดี่ยว: // เอาท์พุต: อาร์โนลด์เคยกล่าวไว้ว่า: "ฉันจะกลับมา";

"นี่คือสตริงง่ายๆ" "คุณได้ลบ C:\\*.* หรือไม่?";

// ผลลัพธ์: คุณลบ C:\*.* หรือไม่?
echo "คุณได้ลบ C:\*.* หรือไม่" -

// ผลลัพธ์: สิ่งนี้จะไม่แทรก: \n บรรทัดใหม่
นี่คือตัวอย่างการใช้เครื่องหมายคำพูดเดี่ยว: "สิ่งนี้จะไม่แทรก:\nขึ้นบรรทัดใหม่";

// ผลลัพธ์: $expand และตัวแปร $อย่างใดอย่างหนึ่งจะไม่ถูกทดแทน
นี่คือตัวอย่างการใช้เครื่องหมายคำพูดเดี่ยว: "$expand และตัวแปร $อย่างใดอย่างหนึ่งจะไม่ถูกแทนที่";
?>

หากสตริงอยู่ในเครื่องหมายคำพูดคู่ ( " ) PHP รู้จักลำดับการหลีกเลี่ยงเพิ่มเติมสำหรับอักขระพิเศษ:

ตารางลำดับการควบคุม:

ลำดับต่อมา ความหมาย
\n ขึ้นบรรทัดใหม่ (LF หรือ 0x0A (10) ในรูปแบบ ASCII)
\r แคร่กลับ (CR หรือ 0x0D (13) ในรูปแบบ ASCII)
\t แท็บแนวนอน (HT หรือ 0x09 (9) ในรูปแบบ ASCII)
\\ แบ็กสแลช
\$ เครื่องหมายดอลลาร์
\" เครื่องหมายคำพูดคู่
\{1,3} ลำดับของอักขระที่สอดคล้องกับนิพจน์ทั่วไป ซึ่งเป็นอักขระในระบบเลขฐานแปด
\x(1,2) ลำดับอักขระที่สอดคล้องกับนิพจน์ทั่วไป อักขระในระบบเลขฐานสิบหก

โปรดจำไว้อีกครั้งว่าหากคุณต้องการจำอักขระอื่น ๆ แบ็กสแลชก็จะถูกพิมพ์ด้วย!

อีกวิธีหนึ่งในการกำหนดสตริงคือการใช้ ไวยากรณ์นอกรีต ("<<< "). หลังจาก<<< необходимо указать идентификатор, затем идет строка, а потом этот же идентификатор, закрывающий вставку.

ตัวระบุการปิดจะต้องเริ่มต้นในคอลัมน์แรกของแถว นอกจากนี้ ตัวระบุจะต้องเป็นไปตามกฎการตั้งชื่อเดียวกันกับแท็กอื่นๆ ทั้งหมดใน PHP: มีเพียงอักขระตัวอักษรและตัวเลขและขีดล่าง และต้องขึ้นต้นด้วยตัวเลขที่ไม่ใช่ตัวเลขหรือขีดล่าง

ความสนใจ! สิ่งสำคัญมากที่จะต้องทราบว่าบรรทัดตัวระบุปิดไม่มีอักขระอื่นใด ยกเว้นอาจเป็นเครื่องหมายอัฒภาค ( ; - ซึ่งหมายความว่าตัวระบุและต้องไม่มีช่องว่างหรือแท็บก่อนหรือหลังเครื่องหมายอัฒภาค สิ่งสำคัญคือต้องเข้าใจว่าอักขระตัวแรกก่อนตัวระบุการปิดต้องเป็นอักขระขึ้นบรรทัดใหม่ตามที่กำหนดโดยระบบปฏิบัติการของคุณ ตัวอย่างเช่น บน Windows® นี่คือ \r.

หากกฎนี้ถูกละเมิดและตัวระบุการปิดไม่ "สะอาด" จะถือว่าตัวระบุการปิดหายไปและ PHP จะพยายามค้นหาต่อไป หากในกรณีนี้ไม่พบตัวระบุการปิดที่ถูกต้อง จะทำให้เกิดข้อผิดพลาดในการประมวลผลด้วยหมายเลขบรรทัดที่ส่วนท้ายของสคริปต์

เฮริด็อก-ข้อความทำงานในลักษณะเดียวกับสตริงในเครื่องหมายคำพูดคู่โดยไม่ต้องมี ซึ่งหมายความว่าคุณไม่จำเป็นต้องใช้ Escape เครื่องหมายคำพูดใน Heredoc แต่คุณยังสามารถใช้ Escape Sequence ด้านบนได้ ตัวแปรได้รับการประมวลผล แต่คุณต้องระมัดระวังเมื่อใช้ตัวแปรที่ซับซ้อนภายใน Heredoc เช่นเดียวกับเมื่อทำงานกับสตริง

ตัวอย่างการกำหนดสตริง heredoc:

$str =<<ตัวอย่างบรรทัด
ครอบคลุมหลายบรรทัด
ใช้ไวยากรณ์ heredoc
อีโอดี;

/* ตัวอย่างที่ซับซ้อนยิ่งขึ้นพร้อมตัวแปร -
คลาสฟู
{
var $foo ;
var $บาร์ ;

ฟังก์ชั่นฟู()
{
$นี่ -> ฟู = "ฟู" ;
$นี่ -> bar = array("Bar1" , "Bar2" , "Bar3" );
}
}

$foo = ใหม่ foo();
$name = "ชื่อของฉัน" ;

เอคโค่<<ฉันชื่อ "$name" ฉันกำลังพิมพ์ $foo-> ฟู
ตอนนี้ฉันกำลังอนุมาน
( $foo -> บาร์ [ 1 ]) .
สิ่งนี้ควรแสดงอักษรตัวใหญ่ "A":
\x41
อีโอที;
?>

บันทึก:มีการเปิดใช้งานเวอร์ชันปรับเปลี่ยนของไซต์ ซึ่งจะปรับให้เหมาะกับเบราว์เซอร์ขนาดเล็กของคุณโดยอัตโนมัติ และซ่อนรายละเอียดบางส่วนของไซต์เพื่อความสะดวกในการอ่าน สนุกกับการรับชม!

ฉันดีใจที่ได้ต้อนรับทุกคนอีกครั้งสู่หน้าของบล็อกที่อุทิศให้กับความซับซ้อนทั้งหมดของการสร้างและการโปรโมตเว็บไซต์ที่ประสบความสำเร็จ - เว็บไซต์บน! ในบทช่วยสอน PHP วันนี้ เราจะพูดถึงหัวข้อต่างๆ เช่น ประเภทของตัวแปร การ Escape อักขระพิเศษ และไวยากรณ์ Heredoc ใน PHP

ประเภทตัวแปร

PHP มีตัวแปรที่แตกต่างกันแปดประเภท

สเกลาร์ 4 ประเภท:

  • บูลีน (บูลีนหรือประเภทลอจิคัล)
  • จำนวนเต็ม (จำนวนเต็ม)
  • ลอย (หมายเลขจุดลอยตัว)
  • เชือก

2 ประเภทผสม:

  • อาร์เรย์
  • วัตถุ

2 ประเภทพิเศษ:

  • ทรัพยากร

ก่อนที่เราจะดูรายละเอียดแต่ละประเภทโดยละเอียด ควรชี้แจงให้ชัดเจนว่า PHP ไม่ใช่ภาษาที่พิมพ์ยาก แต่เป็นภาษาที่พิมพ์แบบไดนามิก ซึ่งหมายความว่าเราไม่จำเป็นต้องประกาศประเภทของตัวแปรแต่ละตัวล่วงหน้า (ตอนสร้าง) PHP เองจะคาดเดาประเภทของตัวแปรนั้น ๆ โดยพิจารณาจากสิ่งที่เราใส่เข้าไปในตัวแปรนี้ นอกจากนี้ยังหมายความว่าไม่เหมือนกับภาษาที่มีการพิมพ์ที่เข้มงวด เราสามารถนำตัวแปรที่มีตัวเลข (จำนวนเต็ม) แล้วใส่สตริง (สตริง) และจะไม่เกิดข้อผิดพลาด! นี่เป็นหนึ่งในคุณสมบัติของ PHP ที่ผู้คน (มือใหม่) ที่ไม่เคยเกี่ยวข้องกับการเขียนโปรแกรมมาก่อนชอบมาก ตามกฎแล้วในท้ายที่สุดทุกคนก็สรุปว่านี่เป็นลบของภาษาไม่ใช่บวก

บูลีน- ประเภทที่ง่ายที่สุด สามารถรับได้เพียง 2 ค่าเท่านั้น: จริงหรือ เท็จ(จริงหรือเท็จ) ไม่ต้องคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ (คุณสามารถเขียน TRUE, true เป็นต้น) ตัวอย่างภาพประกอบ:

สะท้อนชื่อ $ "
", $name2; ?>

ผลลัพธ์:

อย่างที่คุณเห็นเบราว์เซอร์ไม่เข้าใจประเภทบูลีนซึ่งต่างจาก PHP ดังนั้นเมื่อคุณพยายามส่งออก จริงหรือ เท็จก็จะแสดงหมายเลขบนหน้า 1 หรือ บรรทัดว่าง.

เมื่อแปลงเป็นประเภทบูลีน ค่าต่อไปนี้จะถือเป็น FALSE:

  • จำนวนเต็ม 0 (ศูนย์)
  • เลขทศนิยม 0.0 (ศูนย์)
  • สตริงว่างและสตริง "0" หรือ "0"
  • อาร์เรย์ว่าง
  • ประเภทพิเศษ NULL (รวมถึงตัวแปรที่ไม่ได้ตั้งค่า)

ค่าอื่นๆ ทั้งหมดจะถือเป็น TRUE

// เลขทศนิยม$int = -5; // จำนวนลบ$int = 05; // เลขฐานแปด$int = 0x1A; // เลขฐานสิบหก
//ตัวเลขทศนิยม (จริง):$flt = 1.4; $flt = 1.2e3; $flt = 7E-10; -

อย่างไรก็ตาม ประเภทที่ใช้บ่อยที่สุดใน PHP นั้นสามารถพิจารณาได้อย่างแม่นยำ สตริง- สตริงสามารถเขียนด้วยเครื่องหมายคำพูดเดี่ยวหรือคู่ได้ แต่ฉันไม่เคยแนะนำให้ใครเขียนสตริงด้วยเครื่องหมายคำพูดคู่ เนื่องจากการทำเช่นนี้คุณจะบังคับให้ล่าม PHP "แยกวิเคราะห์" สตริงของคุณเนื่องจากมีตัวแปรอยู่ในนั้น ซึ่งแม้ว่าจะเล็กน้อยก็ตาม , ทำให้งานของคุณช้าลง แม้ว่าคุณต้องการใช้ตัวแปรในสตริงของคุณ ก็สามารถทำได้โดยใช้เครื่องหมายคำพูดเดี่ยว + (เชื่อมสองสตริงขึ้นไปเป็นหนึ่งเดียว) เหตุใดจึงต้องมีเครื่องหมายคำพูดคู่เลย? ตัวอย่างเช่น เมื่อเราต้องการใช้อักขระพิเศษ (\n, \r ฯลฯ) แต่จะเพิ่มเติมในภายหลัง

นอกจากนี้ยังเป็นที่น่าสังเกตว่าการใช้งาน คำพูดเดี่ยว + การต่อข้อมูลทำให้โค้ดสามารถอ่านได้ง่ายกว่าการใส่เครื่องหมายคำพูดคู่อย่างไม่เจาะจง แต่พอคำนำตอนนี้คุณจะเห็นและเข้าใจทุกอย่างด้วยตัวคุณเอง:

$หมายเลข = 2; //integer $hand1 = "จำนวนมือที่บุคคลมี:"; //string + ทำให้แยกวิเคราะห์ตัวแปร$hand2 = "จำนวนมือที่บุคคลมี:"; //สตริง
//เพิ่มตัวแปร $number ลงในบรรทัดเหล่านี้:$hand1 = "จำนวนมือที่แต่ละคนมี: $number และข้อความเพิ่มเติม..."; // ไม่แนะนำ $hand2 = "จำนวนมือที่บุคคลมี: " $หมายเลข "และข้อความเพิ่มเติม..."; // แนะนำ!
สะท้อน $hand1, "
", $hand2; ?>

ผลลัพธ์:

เราจะพูดถึงเพิ่มเติมเกี่ยวกับการต่อข้อมูลในบทความถัดไป

  • มันถูกกำหนดให้คงที่ โมฆะ.
  • มันยังไม่ได้รับการกำหนดความหมายใดๆ
  • มันถูกลบออกโดยใช้ ไม่ได้ตั้งค่า()

การศึกษาประเภทตัวแปรที่เหลือในขั้นตอนนี้จะไม่มีประโยชน์ เราจะพบกับประเภทที่เหลือและวิเคราะห์ในการศึกษา PHP ในเชิงลึก

การหลบหนีใน PHP

แต่จะเกิดอะไรขึ้นถ้าเราไม่ต้องการรับค่าของตัวแปรในบรรทัดของเรา แต่ต้องการเขียน $number ตามตัวอักษรล่ะ? ลองพิจารณาสองทางเลือก:

$hand1 = "จำนวนมือที่แต่ละคนมี: \$number และข้อความบางส่วน..."; // DO NOT recommended $hand2 = "จำนวนมือที่แต่ละคนมี: $number และข้อความบางส่วน..."; // แนะนำ!
สะท้อน $hand1, "
", $hand2; ?>

ผลลัพธ์:

ในเวอร์ชันแรก (ด้วยเครื่องหมายคำพูดคู่) เราใช้การหลีกอักขระพิเศษของดอลลาร์ เนื่องจากอักขระพิเศษนี้หยุดมีวัตถุประสงค์พิเศษ (การกำหนดตัวแปร) และกลายเป็นเครื่องหมายดอลลาร์ธรรมดา

ในตัวเลือกที่สอง (ด้วยเครื่องหมายคำพูดเดี่ยว) ดังที่คุณทราบแล้วว่าล่าม PHP ไม่ได้พยายามค้นหาตัวแปรในบรรทัดด้วยซ้ำดังนั้นจึงไม่จำเป็นต้องมีการ Escape

อักขระพิเศษใน PHP

โดยเฉพาะอย่างยิ่งสำหรับผู้อ่านบล็อก เว็บไซต์บน! ฉันได้เตรียมรายการอักขระพิเศษเล็กๆ น้อยๆ ในภาษาการเขียนโปรแกรม PHP:

  • \nขึ้นบรรทัดใหม่
  • \r การคืนรถ
  • \t แท็บแนวนอน
  • \\ แบ็กสแลช (แบ็กสแลช)
  • \$เครื่องหมายดอลลาร์
  • \" เครื่องหมายคำพูดคู่

มาดูการทำงานของอักขระพิเศษโดยใช้ตัวอย่างของ \n - อักขระพิเศษที่สร้างบรรทัดใหม่ (เช่น Enter) แต่เบราว์เซอร์ไม่เข้าใจ (และไม่ควร) เข้าใจและเพิกเฉย แต่ผลลัพธ์ของการทำงานสามารถ จะเห็นได้ในซอร์สโค้ดของหน้า:

สะท้อน $ กฎ "
", $rule2; ?>

ผลลัพธ์:

ซอร์สโค้ด (Ctrl + U):

หากผู้เข้าชมใช้เบราว์เซอร์ไม่แสดงอักขระพิเศษ \n แสดงว่าอักขระพิเศษนั้นมีความหมายว่าอย่างไร

ประการแรก การใช้อักขระพิเศษและโดยเฉพาะ \n คุณสามารถจัดรูปแบบโค้ดบนหน้าเว็บได้อย่างสะดวก (ดังตัวอย่างด้านบน)

ประการที่สอง \n สามารถใช้ ตัวอย่างเช่น ในระหว่างการดำเนินการเขียนไปยังไฟล์ เพื่อสร้างการตัดคำ (Enter) และเขียนต่อในบรรทัดใหม่

ทางเลือกอื่นสำหรับการจัดรูปแบบนี้คือ .

ไวยากรณ์ Heredoc ใน PHP

ผลลัพธ์:

ซอร์สโค้ด (Ctrl + U):

ผลลัพธ์พูดเพื่อตัวมันเอง ทีนี้เรามาดูกันว่าทุกอย่างทำงานอย่างไร:

  • เส้นเริ่มต้นด้วยวงเล็บสามมุม<<<, далее следует имя идентификатора.
  • บรรทัดที่มีตัวระบุการเปิด (ป้ายกำกับ) จะต้องไม่มีอักขระอื่นใดหลังจากนั้น รวมทั้งเว้นวรรคด้วย กล่าวอีกนัยหนึ่งคือทันทีหลังจากเครื่องหมายของเราเราต้องใส่ Enter โดยไม่ต้องเว้นวรรค Enter ทันที!

เราได้รับชุดอักขระ:
0 1 2 3 4 5 6 7 8 9: ; - @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z ( | ) ~ ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ฌ ® yl ° ± ² ³ ´ µ ¶ · ธ ¹ º » ¼ ½ 4 ¿ À Á Ã Â Å Æ ç È É Ë Ë Ì Í Î Ï Ð Š Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á ã ä å æ ç è é ê ë í î ð ñ ò ó ô ô ö ¤ ø ù ú ü ý þ Ā ā Ă Ą Ą Ć ć ĉ Ċ ċ č Ď ď đ đ Ē ē Ĕ ĕ Ė ė Ę Ě ě Ĝ ĝ Ğ ğ Ġ ġ Ģ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į ı ı ij Ĵ ĵ Ķ ķ ĸ Ĺ Ļ ļ Ľ ľ Ŀ ŀ Ł ł Ń Ņ ņ Ň ň ʼn Ŋ ŋ Ō ō Ŏ ŏ Ő ő Œ OE Ŕ ŕ Ŗ ŗ Ř ř Ś Ŝ ŝ Š ş š š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź ź Ż ż ž ž ſ ΄ ΅ Ά · Έ Ή Ί Ό Ύ ΐ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ ΢ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ Ё • Ѓ Є Ѕ І Ї Ј Љ Њ Ћ Ќ Ў Џ A B C D E F G H I J J K L M N O P R S T U V H C CH W Y J J a b c d e g h i j k l m no p r s t u f x

เป็นชุดสัญลักษณ์ที่มองเห็นได้ซึ่งแสดงไว้ในที่นี้ว่า หนีลำดับ" &#หมายเลข" ตัวอย่างเช่นนั่นคืออักษรรัสเซีย - นี้ &#1040- อักขระใด ๆ มีการทดแทนซึ่งในเบราว์เซอร์จะถูกแปลงเป็นอักขระนั้นเองนั่นคือถ้าคุณใส่ข้อความ html ลงไป &#1040ตัวอักษรรัสเซียจะปรากฏในเบราว์เซอร์ .

ฟังก์ชั่นreplace_cyr($เส้นทาง)(
$ค้นหา = อาร์เรย์(“Y”, “A”, “B”, “C”, “G”, “D”, “E”, “F”, “ “Z”, “ฉัน”, “Y”, “K”, “ล”, “ม”, “น”, “โอ”, “พี” "", ""ร"", ""ส"", ""T"", ""U"", ""F" , ""X"", ""C"", ""H"" , ""Ш"", ""Ш"", ""Ъ"", ""И"", ""л"", ""Э"", ""У"", ""Я"", " “a”, “b”, “c”, “d”, “d”, “e”, “g”, “h” , “”ฉัน "", ""th"", ""k"", ""l"", ""m"", ""n"", ""o"", ""p"", " "r"" , ""s"", ""t"", ""u"", ""f"", ""x"", ""ts"", ""h"", ""w "", " "sch", "b", "y", "b", "e", "yu", "ya", "e", ""0 "e");
$แทนที่= อาร์เรย์(“Y”, “A”, “B”, “C”, “G”, “D”, “E”, “F”, “Z”, “ฉัน”, “เจ”, “เค”, “ L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "X", "C", "H" , “Ш”, “Ш”, “Ъ”, “ы”, “b”, “E”, “Yu”, “ฉัน”, “a”, “b”, “c”, “d”, “ d", "f", "g", "z", "i", "th", "k", "l", "m", "n", "o", "p", "r" , “s”, “t”, “y”, “f”, “x”, “ts”, “ch”, “sh”, “sch”, “b”, “s”, “b”, “ อี", "หยู", "ยา", "อี", "0");
กลับ preg_แทนที่($ค้นหา,$แทนที่,$เส้นทาง);
}
$html_text = "ABBCD";
พิมพ์แทนที่_cyr($html_text);
// รับเอาต์พุต
// &#1040;BVGD
// ในเบราว์เซอร์จะมองเห็นได้: ABCD
// นั่นคือข้อความ html ดังกล่าวสามารถดูได้ในการเข้ารหัสใด ๆ
?>

เราแสดงฟังก์ชันที่เปลี่ยนตัวอักษรรัสเซียทั้งหมดให้เทียบเท่ากับอักขระหลีก เพื่อให้ข้อความไม่เปลี่ยนแปลงในการเข้ารหัสใดๆ คุณอาจพูดว่า ทำไมไม่มีใครใช้แนวทางนี้เลย? ท้ายที่สุดแล้วคุณไม่จำเป็นต้องใช้การเข้ารหัสของเบราว์เซอร์! ใช่ แต่มีคุณสมบัติที่ไม่ดีเล็กน้อยอย่างหนึ่งของเอกสาร html ดังกล่าว ขนาดเป็นไบต์เพิ่มขึ้นหลายครั้ง และหน้าเว็บจะโหลดช้ากว่ามาก

เราดูสัญลักษณ์ที่มองเห็นได้ แต่ก็มีสัญลักษณ์ที่ไม่สามารถมองเห็นได้เช่นกัน


เราได้รับงานพิมพ์นี้:
สัญลักษณ์จะไม่ปรากฏที่นี่
ที่นี่คุณสามารถเห็นสัญลักษณ์ \000 \001 \002 \003 \004 \005 \006 \a \b \t \n \v \f \r

ขั้นแรกเราพยายามพิมพ์สตริงตามที่เป็นอยู่ คุณจะเห็นว่าไม่มีอักขระอยู่ และในบรรทัดที่สอง เรานำหน้าอักขระทั้งหมดของบรรทัดนี้ด้วยเครื่องหมายทับ และอักขระเหล่านั้นก็ปรากฏให้เห็น นั่นคือมีอักขระบางตัวที่มีความหมายบางอย่างเมื่อนำหน้าด้วยเครื่องหมายทับ เหล่านี้เป็นอักขระที่ไม่สามารถพิมพ์ได้ ที่จำเป็นที่สุดของพวกเขา \nเป็นอักขระส่งคืนรถ มันจะจบบรรทัดใดก็ได้ ตัวอย่างเช่น หากคุณดูโค้ด html ของไฟล์ที่คุณกำลังดูอยู่ คุณจะไม่เห็นสัญลักษณ์ในข้อความ \nแต่มันยืนอยู่ที่ส่วนท้ายของแต่ละบรรทัด มันมองไม่เห็นเลย เนื่องจากเส้นนั้นมองไม่เห็นจนกว่าเราจะนำหน้าอักขระทั้งหมดด้วยเครื่องหมายทับ

อักขระที่ไม่พิมพ์คุณจะพบ:
\ - ช่องว่าง
\n - ขึ้นบรรทัดใหม่ (ข้ามไปที่บรรทัดใหม่)
\r - แคร่กลับไปที่จุดเริ่มต้นของบรรทัด (ข้ามไปที่จุดเริ่มต้นของบรรทัด)
\t - อักขระแท็บตามยาว (ช่องว่างที่มองไม่เห็น)

ตัวอย่างเช่น หากต้องการเขียนบรรทัดลงในไฟล์ข้อความ คุณต้องทำเช่นนี้

หากคุณเขียนบรรทัดเหล่านี้ลงในไฟล์ของคุณ คุณจะไม่เห็นอักขระตัวสุดท้าย แม้ว่าอักขระเหล่านี้จะปรากฏในบรรทัดก็ตาม แท็บยาวที่เพิ่มเข้าไปในบรรทัดจะทำให้มีช่องว่างที่มองไม่เห็น หากคุณใส่ \t ในบรรทัดและเขียนลงในไฟล์ คุณจะไม่เห็นอักขระนี้เช่นกัน เนื่องจากจะมองไม่เห็น
นั่นคือเราต้องจำไว้ว่าแต่ละบรรทัดที่อ่านจากไฟล์จะสิ้นสุดลง \nหรือบนระบบ windows \ร\nเมื่อเขียนบรรทัดลงในไฟล์ จำเป็นต้องใส่ \n ที่ท้ายแต่ละบรรทัด และในบรรทัดที่อ่านจากไฟล์ก็อาจมี \t ได้

คุณเคยเห็นว่ามีอักขระที่ไม่สามารถพิมพ์ได้:

\000 \001 \002 \003 \004 \005 \006 \a \b \v \f \r

สิ่งเหล่านี้เป็นอักขระที่อันตรายมากสำหรับเรา เนื่องจากจำเป็นสำหรับการสร้างไฟล์ไบนารี ในอนาคต คุณและฉันจะบันทึกข้อมูลในรูปแบบไฟล์ธรรมดาเท่านั้น ดังนั้นจึงต้องลบอักขระเหล่านี้ออกจากทุกสิ่งที่เราได้รับจากแหล่งที่ไม่รู้จัก นั่นคือก่อนที่จะเขียนข้อมูลลงในไฟล์ของเรา เราจะลบอักขระที่เป็นอันตรายออก

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

พิมพ์ "\300 \301 \302 \303 \304 \305 \306 \307 \310 \311 \312 \313 \314 \315 \316 \317 \320 \321 \322 \323 \324 \325 \326 \327 \330 \331 \332 \333 \334 \335 \336 \337 \340 \341 \342 \343 \344 \345 \346 \347 \350 \351 \352 \353 \354 \355 \356 \357 \360 \361 \362 \363 \364 \365 \366 \367 \370 \371 \372 \373 \374 \375 \376 \377";
?>

ผลลัพธ์ของสคริปต์จะเป็น:
A B C D E F G H I J J K L M N O P R S T U V X C CH W Y Y J a b c d e g h i j k l m ไม่ p s t u f x c ch sh sh y y y
นั่นคืออักขระ \300 ที่เขียนแบบนี้ในบรรทัดถูกแทนที่ด้วยตัวอักษรรัสเซียเมื่อพิมพ์ - ด้วยเหตุนี้เราจึงพิมพ์ตัวอักษรของเราออกมาด้วยวิธีนี้

นั่นคือเครื่องหมายทับทำหน้าที่แทนที่อักขระที่อยู่ข้างหน้า มีอักขระที่ไม่สามารถพิมพ์ได้ แต่ก็มีอักขระที่สามารถพิมพ์ได้เช่นกัน

ในที่สุด เราก็ดูว่ามีสัญลักษณ์อะไรบ้าง
ที่พิมพ์คืออักขระที่จะมองเห็นได้หลังจากพิมพ์
อักขระที่ไม่สามารถพิมพ์ได้ เช่น "\something" ที่เขียนลงในไฟล์ข้อความจะไม่สามารถมองเห็นได้ด้วยตา แม้ว่าจะปรากฏในบรรทัดก็ตาม

ตัวละครที่ไม่ดี

หากเรามองอย่างใกล้ชิด เราจะเห็นว่าสัญลักษณ์บางตัวถูกระบุในหลายวิธี บางครั้งสิ่งนี้ทำให้ยากต่อการประมวลผลหน้าด้วยสัญลักษณ์ดังกล่าว และทำให้ชีวิตของเรายากยิ่งขึ้น ตัวอย่างเช่น เมื่อเราพิมพ์ข้อมูลผู้ใช้ที่พวกเขาส่งไปยังแขกของเรา หนังสือ ฯลฯ นั่นคือขอแนะนำให้แทนที่อักขระที่ซ้ำกันทั้งหมดด้วยอักขระตัวเดียว . เมื่อดูเผินๆ ดูเหมือนเป็นความคิดที่บ้าบอ แต่เมื่อคุณต้องเผชิญกับความจริงที่ว่าคุณต้องการเปลี่ยนแปลงบางอย่างในข้อความ Html ของคุณ คุณจะต้องเผชิญกับปัญหา "การเรียงลำดับอักขระ" ต่อไปเราจะพิจารณาฟังก์ชันที่ในข้อความเปลี่ยนทั้งหมดเทียบเท่ากับสี่ฟังก์ชันหลัก: " " - ...

สองเท่า เดี่ยว แดช สามจุด
เครื่องหมาย " - ...
เทียบเท่ากับข้อความ HTML " (") " - ...
คล้ายกันในความหมายเทียบเท่า
แสดงในข้อความ HTML
“
”
«
»
“
”
«
»
‘
’
‘
’
–
—
–
—
… …

ลองเขียนฟังก์ชันกัน โดยการแทนที่เครื่องหมายคำพูดคู่ทั้งหมดไปยังบันทึกรวมเดียว: "

ตอนนี้เรามีฟังก์ชันที่จะเข้ามาแทนที่ ข้อความ HTMLเครื่องหมายคำพูดคู่ทั้งหมดคือ " , เครื่องหมายคำพูดเดี่ยวทั้งหมดคือ " , อักขระที่มีลักษณะคล้ายเส้นประทั้งหมดคือ - , วงรีทั้งหมดเป็นเพียงสามจุด

ดี,
โปรดบอกฉันว่าต้องทำอย่างไรหากคุณต้องการยอมรับข้อความจากผู้ใช้ในรูปแบบใด ๆ รวมถึงเซ่อที่มุ่งร้ายล้วนๆ
ฉันจะประมวลผลข้อมูลของเขาได้อย่างไรและสคริปต์จะไม่โค้งงอและลงทะเบียนในฐานข้อมูล mysql แล้วแสดงบนหน้าจอพร้อมผลลัพธ์...
เช่น Tinyurl
โดยทั่วไป โปรดบอกสัญลักษณ์ที่เป็นอันตรายสำหรับ php และ mysql ให้ฉันทราบเพื่อให้สามารถแทนที่ได้
ฉันคัดกรองอึมาตรฐาน แต่ฉันไม่รู้ว่าต้องทำอย่างไรกับอันอื่น ไม่อย่างนั้นฉันก็จบลงด้วยสคริปต์รั่ว : (อาจจะ

คำตอบ:


ฉันมีคำถาม
ที่ส่วนท้ายของอาร์เรย์หมายความว่าอย่างไร
"0"
""0"จ"

คำตอบ: e - ประมวลผลโค้ด Php ด้วยการแทนที่องค์ประกอบทั้งหมดด้วยสิ่งที่เทียบเท่ากัน... การตัดสินใจแทนที่ศูนย์ด้วยศูนย์เป็นเรื่องส่วนตัวของฉันเนื่องจากฉันไม่พบการแทนที่ที่เหมาะสมกว่านี้... ดูเหมือนว่าจะเป็นสากลและเหมาะสม สำหรับทุกสิ่ง... ดังนั้นอย่างไร บางครั้งเราไม่รู้ว่าเราจะทำการแทนที่อะไร แต่เราสร้างอาร์เรย์แบบไดนามิก อันหนึ่งที่เราเปลี่ยนแปลง และอันหนึ่งสำหรับสิ่งที่เราเปลี่ยนแปลง


ขอบคุณมากสำหรับผู้เขียน ไม่เช่นนั้นจุดไข่ปลาทำให้ฉันตีโพยตีพาย

คำตอบ: ใช่ จุดไข่ปลาเป็นหนึ่งในสิ่งที่น่ารังเกียจ...


ด้วยความเคารพอย่างสูงต่อผู้เขียน!
ฉันค้นหาข้อมูลทางอินเทอร์เน็ตมานานแล้วและที่นี่ก็มาถึงการตรัสรู้!
ขอบคุณอีกครั้ง!

คำตอบ:


สวัสดี. ฉันย้ายออกจากโฮสติ้งเซนต์ปีเตอร์สเบิร์ก (ของเราถูกกว่ามากและไม่มีใครส่งสแปมไปยังกล่องจดหมายที่สร้างขึ้นเป็นเวลาครึ่งชั่วโมง) แต่ฉันเหยียบคราด - ด้วย MySQL มันจะแสดงแทนตัวอักษรรัสเซีย ?????
บอกฉันว่าจะเอาชนะมันได้อย่างไร? เขียนชื่อด้วยตัวอักษรรัสเซีย - เข้าใจแล้ว????? รูบาส การเข้ารหัสเป็น utf-8 ทุกที่

คำตอบ: รหัส.htmlอ่านมันที่นั่น นอกจากนี้ยังมีสามหน้าเกี่ยวกับการเข้ารหัส ใช้ฟังก์ชันมาตรฐานและการทดสอบของเรา เป็นไปได้มากว่ามันจะส่งออกจากฐานข้อมูลเป็น win-1251 แล้ว


หากฉันเข้าใจถูกต้องในการโอนแคร่ไปยังการ์ดใหม่ \n

คำตอบ:


หน้าหนังสือ: 1
หน้าปัจจุบัน: 1 ข้อความทั้งหมด: 6