Escape php เครื่องหมายคำพูดเดี่ยว บทเรียน PHP: ประเภทของตัวแปร การ Escape อักขระพิเศษ และไวยากรณ์ Heredoc ใน PHP อักขระพิเศษในเครื่องหมายคำพูดเดี่ยวและคู่

รับสตริงในหลามเช่น:

S = "ประโยคนี้มี "เครื่องหมายคำพูด" อยู่บ้าง\n"

ฉันต้องการสร้างสำเนาใหม่ของสตริงนี้ด้วยเครื่องหมายคำพูดที่เป็น Escape (สำหรับใช้ในภายหลังใน Javascript) ตัวอย่างเช่นฉันต้องการทำสิ่งนี้:

"ประโยคนี้มี \"quotes\" อยู่บ้าง\n"

ฉันลองใช้การแทนที่ () เช่น:

S.แทนที่(""", "\"")

แต่ส่งคืนสตริงเดียวกัน ดังนั้นฉันจึงลองสิ่งนี้:

S.แทนที่(""", "\\"")

แต่ส่งคืนเครื่องหมายคำพูดแบบ Escape สองครั้งเช่น:

"ประโยคนี้มี \\"เครื่องหมายคำพูด\\" อยู่บ้าง\n"

จะแทนที่ " ด้วย \" ได้อย่างไร?

อัปเดต:

ฉันต้องการเป็นผลลัพธ์จากข้อความคัดลอกนี้ที่แสดงทั้งเครื่องหมายคำพูดและบรรทัดใหม่เป็น Escape กล่าวอีกนัยหนึ่ง ฉันต้องการที่จะคัดลอก:

"ประโยคนี้มี \"คำพูด\" อยู่บ้าง\n"

หากฉันใช้สตริงดิบและพิมพ์ผลลัพธ์ก็คือฉันได้รับเครื่องหมายคำพูดที่หลีกเลี่ยงอย่างถูกต้อง แต่การขึ้นบรรทัดใหม่ที่ใช้ Escape จะไม่พิมพ์ออกมา ถ้าฉันไม่ใช้ print ฉันจะได้รับบรรทัดใหม่แต่มีการ Escape สองครั้ง ฉันจะสร้างสตริงที่ฉันสามารถคัดลอกที่แสดงทั้งสตริงและเครื่องหมายคำพูดได้อย่างไร


2017-09-19 05:09

คำตอบ:

สวัสดี โดยปกติแล้วเมื่อทำงานกับ Javascript ฉันจะใช้โมดูล json ที่ Python เตรียมไว้ให้ สิ่งนี้จะหนีจากสตริงรวมถึงสิ่งอื่น ๆ อีกมากมายตามที่ผู้ใช้ 2357112 ชี้ให้เห็น

Import json string = "ประโยคนี้มี "เครื่องหมายคำพูด" อยู่บ้าง\n" json.dumps(string) #gives you ""ประโยคนี้มี \\"quotes\\" อยู่บ้าง\\n""


2017-09-19 05:33

ความพยายามครั้งที่สองของคุณถูกต้อง แต่คุณสับสนกับความแตกต่างระหว่าง repr และ str ของสตริง วิธีที่ใช้สำนวนมากขึ้นในการทำวิธีที่สองคือการใช้ "สตริงดิบ":

>>> s = "ประโยคนี้มี "เครื่องหมายคำพูด" อยู่บ้าง\n" >>> print s ประโยคนี้มี "เครื่องหมายคำพูด" อยู่บ้าง >>> print s.replace(""", r"\"") # สตริงดิบที่ใช้ที่นี่ ประโยคนี้มี \"quotes\" อยู่บ้าง >>> s.replace(""", r"\"") "ประโยคนี้มี \\"quotes\\" อยู่บ้าง\n"

สตริงดิบเป็นแบบ WYSIWYG: แบ็กสแลชในสตริงต้นทางเป็นเพียงอักขระตัวเดียว สิ่งนี้ - ตามที่คุณค้นพบ - นั้นง่ายต่อการสับสน ;-)

การพิมพ์สตริง (เอาต์พุตที่สองด้านบน) แสดงว่าสตริงมีอักขระที่คุณต้องการ

หากไม่มีการพิมพ์ (เอาต์พุตสุดท้ายด้านบน) Python จะใช้ repr() กับค่าโดยปริยายก่อนที่จะแสดง ผลลัพธ์คือสตริงที่จะสร้างต้นฉบับหาก Python ประเมินผล นี่คือสาเหตุที่ช่องว่างเพิ่มขึ้นสองเท่าในบรรทัดสุดท้าย พวกมันไม่อยู่ในสตริง แต่จำเป็นเพื่อว่าหาก Python ประเมินพวกมัน แต่ละ \\ จะกลายเป็นหนึ่งในผลลัพธ์ \


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

http://site/page/php/039_php_kavyichki.html

เครื่องหมายคำพูด PHP, เครื่องหมายคำพูดเดี่ยว, เครื่องหมายคำพูดคู่, การ Escape

วันนี้เราจะมาจัดการกับเครื่องหมายคำพูด แต่ไม่ใช่คำพูดธรรมดา แต่เป็นเครื่องหมายคำพูดใน PHP และบวกกับเครื่องหมายคำพูดและตัวเลือกต่างๆ

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

และมีหลายตัวเลือกสำหรับการหลีกราคา

เครื่องหมายคำพูดอยู่ที่ไหนบนแป้นพิมพ์?

หากคุณกำลังจะใช้งานโค้ดคุณจำเป็นต้องรู้ว่าเครื่องหมายคำพูดบนแป้นพิมพ์ในรูปแบบละตินอยู่ที่ใด - นี่คือ

ตัวอักษร E – ตัวพิมพ์เล็ก:

และสะกดตัวอักษร e - นี่คือเครื่องหมายคำพูดเดี่ยว:

สัญลักษณ์เครื่องหมายคำพูดคู่และเดี่ยวของ PHP

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

อักขระเครื่องหมายคำพูดคู่:

"

อักขระคำพูดเดียว:

"

PHP หนีคำพูด

คุณหมายถึงอะไรจริงๆ โดยการหลีกเลี่ยงเครื่องหมายคำพูดใน PHP

มาดูตัวอย่างกันดีกว่า เพราะด้วยตัวอย่างจะง่ายกว่าเสมอที่จะเข้าใจสิ่งที่เรากำลังพูดถึง!

มาเขียนโค้ด php:

echo "เครื่องหมายคำพูด php";

แต่ถ้าเราวางโค้ดนี้ตรงนี้ก็กลัวว่าจะไม่เห็นบรรทัดพวกนี้!?

ทำไม ใช่ เพียงเพราะโค้ดใช้งานไม่ได้

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

ทำไมสิ่งนี้ถึงเกิดขึ้น?

เนื่องจากภายใน echo มีเครื่องหมายคำพูดเพิ่มเติมซึ่งถือเป็นโค้ด PHP และหากมีมากกว่าที่คาดไว้ก็จะเกิดข้อผิดพลาด!

ในกรณีนี้จะทำยังไง!?

คุณต้องแทนที่เครื่องหมายคำพูดคู่ด้วยเครื่องหมายคำพูดเดี่ยว

ลองใช้โค้ดเดียวกันและเปลี่ยนเครื่องหมายคำพูดคู่เป็นเครื่องหมายคำพูดเดี่ยว

echo '"ราคา php"';

มาดูกันว่าเราได้อะไรบ้าง!

เหล่านั้น. เรานำโค้ดยอดนิยมมาวางลงในหน้านี้โดยตรง และนี่คือผลลัพธ์:


2.

ตัวเลือกที่สองสำหรับการหลีกราคา

มีบางสถานการณ์ที่การใช้เครื่องหมายคำพูดเดี่ยวเป็นไปไม่ได้!

ในกรณีนี้ จะใช้เครื่องหมายทับซ้าย ก่อนที่แต่ละองค์ประกอบที่ต้องหลบหนีคุณจะต้องใส่เครื่องหมายทับดังกล่าว

ลองใช้รายการก่อนหน้าและทำสิ่งเดียวกันโดยใช้เครื่องหมายทับเท่านั้น:

เสียงสะท้อน " ราคา PHP";

มาดูผลลัพธ์กัน:

วิธีลบเครื่องหมายคำพูด

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

เครื่องหมายคำพูดเดี่ยวผ่านโค้ด html::

" - เครื่องหมายคำพูดเดี่ยว " " "

อ้างสองครั้งผ่านรหัส html:

" - เครื่องหมายคำพูดคู่ " " "

คำพูดดังกล่าวจะดูเหมือนคำพูดบนหน้าจอ แต่จะไม่ปรากฏในโค้ด Php อีกต่อไป...

และอื่นๆ อีกมากมาย!

โค้ด PHP ทั้งหมดจะต้องได้รับการปฏิบัติอย่างระมัดระวัง! ตัวอย่างเช่น หากคุณเขียนบางอย่างใน Word หรือข้อความ แสดงว่าคุณเริ่มเขียนโค้ดในนั้น เหมือนที่เกิดขึ้นกับฉันครั้งแรก

และฉันไม่เข้าใจว่าปัญหาคืออะไร เขาไม่ต้องการแสดงโค้ดง่ายๆ ให้ฉันดูจริงๆ ฉันพร้อมจะทุบคอมให้แตกด้วยค้อนขนาดใหญ่!!!

แต่ปรากฎว่าเครื่องหมายคำพูดในตัวแก้ไขโค้ดแตกต่างจาก Word และมันเป็นไปไม่ได้ที่จะเข้าใจหากคุณไม่ผ่านมันมา!

2007.11.08 16:07

ฉันพบปัญหาในการเพิ่มเครื่องหมายคำพูดใน PHP โดยอัตโนมัติเมื่อป้อนข้อมูลลงในฐานข้อมูล

หลังจากค้นหาข้อมูลบนอินเทอร์เน็ต ฉันพบว่าปัญหาสามารถแก้ไขได้โดยการเปลี่ยนการตั้งค่าเซิร์ฟเวอร์โดยใช้คำสั่งใน .htaccess: magic_quotes_gpc และ magic_quotes_runtime

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

คำสั่งเรียกรวมกันว่า "คำพูดวิเศษ" แต่ฉันเรียกมันว่า "คำพูดนรก" แท้จริงแล้ว ในแอปพลิเคชันที่เขียนไว้อย่างดีนั้น ไม่จำเป็นต้องมีการเสนอราคาอัตโนมัติ ยิ่งกว่านั้น การเสนอราคาพิเศษจะเข้ามาขวางทางและจำเป็นต้องลบออก

คำสั่งแรก - magic_quotes_gpc - หมายความว่า PHP จะเพิ่มเครื่องหมายทับให้กับข้อมูลที่มาจากผู้ใช้โดยอัตโนมัติ - จากคำขอ POST, GET และคุกกี้ ตัวแปรที่สอง - magic_quotes_runtime - หมายความว่ามีการเพิ่มเครื่องหมายทับลงในข้อมูลที่ได้รับระหว่างการเรียกใช้สคริปต์ เช่น จากไฟล์หรือฐานข้อมูล ดังนั้นบางฟังก์ชันที่นำเสนอข้อมูลดังกล่าวจึงมีเครื่องหมายคำพูด

หากคุณต้องการปฏิเสธบริการที่ล่วงล้ำ คุณ (ในสถานการณ์ที่หายากและมีความสุขเมื่อคุณเป็นเจ้าของเซิร์ฟเวอร์โดยสมบูรณ์) ปิดการใช้งานตัวแปรการกำหนดค่าเหล่านี้ในไฟล์ php.ini หรือ (ยกเว้นในกรณีที่คุณเป็น โฮสต์เว็บไซต์บนโฮสติ้งฟรี) คุณสามารถทำการเปลี่ยนแปลงไฟล์ .htaccess ได้ นี่คือไฟล์ที่มีโลคัล - สำหรับไดเร็กทอรีเดียวและไม่ใช่สำหรับเซิร์ฟเวอร์ทั้งหมด - การตั้งค่า apache และเพิ่มบรรทัดต่อไปนี้เข้าไป

( PHP 4, PHP 5, PHP 7)

เพิ่มสแลช — สตริงเครื่องหมายคำพูดที่มีเครื่องหมายทับในรูปแบบ C

คำอธิบาย

เพิ่มสแลช (สตริง $str , สตริง $charlist) : สตริง

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

พารามิเตอร์

สตริงที่จะหลบหนี

ชาร์ลิสต์

รายชื่อตัวละครที่ต้องการหลีก หาก charlist มีอักขระ \n, \rฯลฯ จะถูกแปลงเป็นรูปแบบ C-like ในขณะที่อักขระที่ไม่ใช่ตัวอักษรและตัวเลขอื่นๆ ที่มีรหัส ASCII ต่ำกว่า 32 และสูงกว่า 126 จะแปลงเป็นรูปแบบฐานแปด

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

echo addcslashes ("foo" , "A..z" );
// เอาต์พุต: \f\o\o\[ \]
// ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กทั้งหมดจะถูกยกเว้น
// ... แต่ [\]^_` ก็เช่นกัน
?>

นอกจากนี้ หากอักขระตัวแรกในช่วงมีค่า ASCII สูงกว่าอักขระตัวที่สองในช่วง จะไม่มีการสร้างช่วง เฉพาะอักขระเริ่มต้น สิ้นสุด และจุดเท่านั้นที่จะหลบหนี ใช้ ลำดับ()ฟังก์ชั่นเพื่อค้นหาค่า ASCII ของตัวละคร

echo addcslashes ("สวนสัตว์["."]" , "z..A" );
// เอาต์พุต: \zoo["\."]
?>

โปรดใช้ความระมัดระวังหากคุณเลือกที่จะหลีกอักขระ 0, a, b, f, n, r, t และ v พวกมันจะถูกแปลงเป็น \0, \a, \b, \f, \n, \r, \t และ \v ซึ่งทั้งหมดนี้เป็นลำดับหลีกที่กำหนดไว้ล่วงหน้าใน C นอกจากนี้ ลำดับเหล่านี้จำนวนมากยังถูกกำหนดไว้ใน C- อื่น ๆ ด้วย ภาษาที่ได้รับ รวมถึง PHP หมายความว่าคุณอาจไม่ได้รับผลลัพธ์ที่ต้องการหากคุณใช้ผลลัพธ์ของ เพิ่มสแลช()เพื่อสร้างโค้ดในภาษาเหล่านั้นด้วยอักขระเหล่านี้ที่กำหนดไว้ใน charlist