Site icon PlusMagi's Blog By Pitt Phunsanit

WordPress: แก้ Double / Triple Escaping

เพราะว่า blog เขียนมานานจากที่เป็นระบบเก่าจนเปลี่ยนมาใช้ Gutenberg ทำให้บางครั้งการ import / export / convert block มันทำให้มีความผิดพลาด ในการ Double / Triple Escaping เช่น ปัญหาเกิดจากการที่ WordPress ( หรือตัว Plugin Syntax Highlighter ) พยายามจะ “ช่วย” Escape ตัวอักษรพิเศษซ้ำซ้อน จนทำให้ & กลายเป็น & และส่งผลให้ < กลายเป็น < ( Double / Triple Escaped ) อย่างที่เห็นในเนื้อหา จนไม่สามารถ copy code เอาไปใช้ได้ทันที บางครั้งขนาดที่ว่า ถ้าไม่เคยเขียนภาษานั้น ๆ จนชิน จะดูไม่ออกเลยว่าโค้ทตัวอย่างมันเขียนอะไรไว้เลย


Query Double / Triple Escaping

SELECT
	ID,
	post_title,
	post_status,
	-- ระบุตำแหน่งที่พบเป็นตัวเลข (Index)
	LOCATE('&', post_content) AS found_at_position,
	-- ดึงข้อความรอบๆ จุดที่พบ (หน้า 20 หลัง 50 ตัวอักษร) เพื่อดูบริบท
	SUBSTRING(post_content, GREATEST(1, LOCATE('&', post_content) - 20), 70) AS error_context,
	post_content
FROM wp_posts
WHERE (
	post_content LIKE '%<%'
	OR post_content LIKE '%>%'
	OR post_content LIKE '%"%'
	OR post_content LIKE '%&%'
)
AND post_status IN ('publish', 'schedule')
ORDER BY ID ASC;

การทำงานจะเป็นการค้นหา HTML Escaping ที่ผิดจากตัวอย่างที่เจอในบทความที่ publish หรือ schedule ไว้ จากนั้นจะแสดงออกมาเป็น

IDpost_titlepost_statusfound_at_positionerror_contextpost_content
1784สร้าง Data Dictionary แบบด่วน ๆpublish2868— 1. Table Header &amp; Caption (คง REPLACE ไว้เ…<!– wp:html –> <div class=”alert alert-info” rol…
2486joget: BeanShell Form Binderpublish2429imaryKey (Unescaped &amp;&amp; เรียบร้อยแล้ว)    …<!– wp:paragraph –> <p>ตัวอย่างการใช้ BeanShell …
6974Tabulator: data.filterspublish2257option value=”&lt;”>&amp;lt;&lt;/option>   &lt;op…<!– wp:paragraph –> <p>ตัวอย่างการทำ search / fi…

คำเตือน

ก่อนที่จะเปลี่ยนข้อความใน post_content โดยคำสั่ง replace ควรเอา ID ไปค้นหาบทความใน
/wp-admin/post.php?post={ ID}&action=edit

มากกว่าเพราะ


อ่านเพิ่มเติม

Exit mobile version