รับสตริงในหลามเช่น:
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