บทความสำหรับนักพัฒนา
คำอธิบายรูปแบบการเข้ารหัส การทำงานกับ JSON และหัวข้ออื่น ๆ ที่เป็นประโยชน์สำหรับนักพัฒนา พร้อมลิงก์ไปยังเครื่องมือออนไลน์ tulzy ที่เกี่ยวข้อง
การเข้ารหัส
Base64: การเข้ารหัสมีไว้ทำไมและทำงานอย่างไร
Base64 เปลี่ยนข้อมูลไบนารีเป็นข้อความ ASCII อย่างไร และเมื่อไหร่ที่จำเป็นต้องใช้จริง ๆ
Base32: ต่างจาก Base64 อย่างไรและสะดวกกว่าเมื่อไหร่
ตัวอักษร Base32 ที่ไม่แยกตัวพิมพ์เล็กใหญ่ และกรณีที่สะดวกกว่า Base64
URL Encode/Decode: percent-encoding ในลิงก์
อักขระพิเศษในที่อยู่และพารามิเตอร์กลายเป็นลำดับ %XX ได้อย่างไร
HTML Entities: วิธีแสดงอักขระพิเศษอย่างปลอดภัย
ทำไมต้อง escape อักขระ < > & และสิ่งนี้ป้องกันไม่ให้มาร์กอัปเสียหายได้อย่างไร
JWT: โครงสร้างโทเคนและความหมายของการ "ถอดรหัส" JWT
header, payload และ signature ของ JWT และทำไมการถอดรหัสจึงไม่เหมือนกับการตรวจสอบลายเซ็น
Unicode Escape: ลำดับ \uXXXX หมายความว่าอย่างไร
ลำดับแบบ A ใน JSON และสตริง JS มาจากไหน และหมายความว่าอย่างไร
ROT13 และรหัสซีซาร์: การแทนที่อักขระแบบง่าย
ทำไมการเลื่อน 13 ตัวอักษรทำให้ ROT13 ผกผันในตัวเอง และทำไมยังมีการใช้อยู่ในปัจจุบัน
Punycode: โดเมนสากลทำงานใน DNS อย่างไร
โดเมนที่มีอักขระไม่ใช่ละตินกลายเป็นรูปแบบ ASCII ที่มีคำนำหน้า xn-- ได้อย่างไร
รหัสมอร์ส: ข้อความกลายเป็นจุดและขีดได้อย่างไร
หลักการเข้ารหัสตัวอักษรเป็นจุดและขีด และรหัสมอร์สยังใช้ที่ไหนอยู่บ้างในปัจจุบัน
Data URI: เมื่อไหร่ควรฝังรูปภาพลงในโค้ดโดยตรง
Data URI ฝังเนื้อหาของไฟล์ลงใน HTML หรือ CSS โดยตรงอย่างไร และเมื่อไหร่ที่คุ้มค่า
Gzip + Base64: บีบอัดข้อมูลเพื่อส่งเป็นข้อความ
ทำไมข้อมูลไบนารีที่บีบอัดแล้วจึงถูกเข้ารหัสด้วย Base64 อีกครั้งก่อนใส่ลงในฟิลด์ข้อความ
XML Entities: การ escape อักขระในเอกสาร XML
เอนทิตี XML ที่จำเป็นห้าตัว ซึ่งหากไม่มีเอกสารจะเสียหายขณะแยกวิเคราะห์
JSON
JSON Formatter: การจัดรูปแบบ ย่อขนาด และตรวจสอบความถูกต้อง
จัดรูปแบบเพื่อให้อ่านง่าย ย่อขนาดเพื่อลดขนาด ตรวจสอบเพื่อความถูกต้อง — สามงานที่ต่างกันกับ JSON
JSONPath: ค้นหาข้อมูลใน JSON โดยไม่ต้องแยกวิเคราะห์เอง
JSONPath ช่วยดึงค่าที่ต้องการจาก JSON ขนาดใหญ่ด้วยนิพจน์เดียวแทนการไล่ดูเองอย่างไร
JSON Diff: การเปรียบเทียบเชิงโครงสร้างต่างจากการเปรียบเทียบข้อความอย่างไร
เหตุใดลำดับคีย์จึงไม่ควรส่งผลต่อการเปรียบเทียบเอกสาร JSON สองฉบับ
JSON Schema: วิธีอธิบายและตรวจสอบโครงสร้างของ JSON
JSON Schema ช่วยตรวจสอบโดยอัตโนมัติว่าข้อมูลตรงกับสัญญาที่คาดหวังหรือไม่ได้อย่างไร
JSON Flatten: แปลงโครงสร้างซ้อนกันให้เป็นรายการแบบแบน
JSON ที่ซ้อนกันลึกแปลงเป็นรายการแบนของคีย์แบบ user.address.city ได้อย่างไร
JSON Sort Keys: เหตุใดจึงต้องเรียงลำดับคีย์ของอ็อบเจกต์
เหตุใดลำดับคีย์ JSON จึงไม่ถูกกำหนดไว้ แต่การเรียงลำดับยังคงมีประโยชน์ในทางปฏิบัติ
JSON Repair: เหตุใด JSON จึงเสียหายและจะแก้ไขอย่างไร
สาเหตุทั่วไปของ JSON ที่ "เสียหาย" และสิ่งที่การซ่อมแซมอัตโนมัติทำได้และทำไม่ได้
Mock JSON Generator: ข้อมูลปลอมมีประโยชน์อย่างไร
ข้อมูล mock ช่วยให้เริ่มสร้าง UI ได้ก่อนที่ backend จะพร้อมอย่างไร
JSON ↔ YAML/CSV/XML/TOML: เมื่อไหร่และทำไมต้องแปลง
ข้อมูลใดสูญหายเมื่อแปลง JSON เป็น CSV และเหตุใด YAML กับ TOML จึงเป็นที่นิยมสำหรับไฟล์การตั้งค่า
ข้อความ
camelCase, snake_case, kebab-case: ควรใช้รูปแบบไหนเมื่อไหร่
เหตุใดจึงมี camelCase, snake_case และ kebab-case และแต่ละแบบมักใช้ที่ไหน
Text Diff: อัลกอริทึมหาความแตกต่างของข้อความทำงานอย่างไร
อัลกอริทึม diff หาชุดการเปลี่ยนแปลงที่น้อยที่สุดระหว่างข้อความสองเวอร์ชันได้อย่างไร
Regular Expression: พื้นฐานและกับดักของการจับคู่แบบโลภ
ความแตกต่างระหว่างการจับคู่แบบโลภและแบบขี้เกียจใน regex และเหตุใดจึงสำคัญในทางปฏิบัติ
การเรียงบรรทัด: ทำไมการเรียงตามตัวอักษรถึงต่างจากการเรียงตามตัวเลข
เหตุใดการเรียงตามตัวอักษรจึงปฏิบัติต่อตัวเลขเหมือนข้อความ และต่างจากการเรียงตามตัวเลขอย่างไร
การ Escape สตริง: ทำไมกฎถึงต่างกันใน JS, JSON, shell และ regex
เหตุใดจึงไม่มีกฎการ escape เดียวที่ใช้ได้ทุกที่ — JS, JSON, shell และ regex ต่างก็มีกฎของตัวเอง
CRLF กับ LF: ทำไมการขึ้นบรรทัดใหม่ยังคงสร้างปัญหา
ความแตกต่างระหว่าง CRLF กับ LF มาจากไหน และเหตุใดยังคงสร้างปัญหากับ git และสคริปต์
การนับตัวอักษรและคำ: ทำไม Unicode ทำให้ซับซ้อน
เหตุใดอิโมจิหนึ่งตัวที่เห็นด้วยตาจึงอาจประกอบด้วย code point หลายตัวใน Unicode
Lorem Ipsum: ข้อความหลอกนี้มาจากไหนและทำไมไม่มีความหมาย
ข้อความ Lorem Ipsum มาจากไหนจริง ๆ และเหตุใดจึงใช้ข้อความไร้ความหมายแทนข้อความจริง
Slugify: หัวข้อกลายเป็น URL ที่ใช้งานได้อย่างไร
หัวข้อบทความกลายเป็น URL ที่สะอาดและอ่านง่ายด้วยเครื่องหมายขีดได้อย่างไร
Markdown: ทำไมจึงกลายเป็นมาตรฐานของเอกสาร
เหตุใด Markdown จึงยังอ่านง่ายแม้ในรูปแบบดิบ ต่างจาก HTML
ช่องว่างที่มองไม่เห็น: ทำไมการเปรียบเทียบข้อความที่ดูเหมือนกันจึงล้มเหลว
ช่องว่างที่มองไม่เห็นเพียงตัวเดียวทำให้การเปรียบเทียบข้อความสองชิ้นที่ดูเหมือนกันล้มเหลวได้อย่างไร
การกลับข้อความ: ทำไมจึงพังกับอิโมจิ
เหตุใดการกลับข้อความแบบง่ายจึงทำให้อิโมจิที่ประกอบจาก code point หลายตัวพังไป
การวิเคราะห์ความถี่ข้อความ: จาก word cloud สู่การถอดรหัส
การวิเคราะห์ความถี่ตัวอักษรช่วยถอดรหัสแบบแทนที่อักษรง่าย ๆ ในอดีตได้อย่างไร
แฮช/การเข้ารหัส
Hash Generator: MD5, SHA-1 และ SHA-256 ต่างกันอย่างไร
เหตุใด MD5 จึงยังใช้ตรวจสอบความถูกต้องของไฟล์ แต่ไม่ใช้กับรหัสผ่าน
Checksum Verifier: วิธีตรวจสอบว่าไฟล์ไม่เสียหาย
เหตุใด checksum ที่ตรงกันจึงยืนยันความถูกต้องของไฟล์ แต่ไม่ยืนยันว่าใครเป็นผู้สร้าง
HMAC: แฮชที่มีคีย์ต่างจากแฮชธรรมดาอย่างไร
เหตุใด SHA-256 ธรรมดาจึงไม่ป้องกันการปลอมแปลงข้อความ แต่ HMAC ป้องกันได้
Bcrypt: เหตุใดรหัสผ่านจึงถูกแฮชอย่างช้า ๆ ไม่ใช่เร็ว
เหตุใด SHA-256 ที่เร็วจึงเป็นตัวเลือกที่แย่สำหรับรหัสผ่าน และ bcrypt ที่ช้าจึงเป็นตัวเลือกที่ถูกต้อง
UUID: ตัวระบุที่แทบไม่เคยซ้ำกันถูกสร้างขึ้นอย่างไร
เหตุใด UUID v4 จึงสามารถสร้างแยกกันได้บนเครื่องนับล้านเครื่องโดยไม่มีความเสี่ยงชนกัน
Password Generator: อะไรที่ทำให้รหัสผ่านแข็งแกร่งจริง ๆ
เหตุใดรหัสผ่านยาวที่ประกอบจากคำในพจนานุกรมจึงแข็งแกร่งกว่ารหัสผ่านสั้นที่มีสัญลักษณ์และตัวเลข
AES: การเข้ารหัสแบบสมมาตรทำงานอย่างไร
เหตุใดคีย์เดียวกันจึงเข้ารหัสและถอดรหัสข้อมูลใน AES และสิ่งนี้ต่างจากการเข้ารหัสแบบอสมมาตรอย่างไร
Argon2: เหตุใดอัลกอริทึมนี้จึงชนะการแข่งขันแฮชรหัสผ่าน
Argon2 ป้องกันการโจมตีด้วย GPU ได้ดีกว่าอัลกอริทึมแฮชรหัสผ่านรุ่นเก่าอย่างไร
Scrypt: เหตุใดอัลกอริทึมนี้จึงต้องการหน่วยความจำมากขนาดนั้น
เหตุใด scrypt จึงต้องการหน่วยความจำมากโดยตั้งใจเพื่อให้การเดารหัสบนอุปกรณ์ ASIC ยากขึ้น
TOTP: รหัสใช้ครั้งเดียวในแอปยืนยันตัวตนทำงานอย่างไร
เหตุใดรหัสใน Google Authenticator จึงทำงานได้โดยไม่มีอินเทอร์เน็ตและซิงค์กับเซิร์ฟเวอร์ผ่านเวลาเท่านั้น
PBKDF2: มาตรฐานการยืดคีย์ที่เก่าแก่ที่สุด
เหตุใดจำนวนรอบการวนซ้ำที่แนะนำสำหรับ PBKDF2 จึงเพิ่มขึ้นทุกปี
X.509: ภายในใบรับรอง SSL มีอะไรบ้าง
เบราว์เซอร์ตรวจสอบอะไรในใบรับรองของเว็บไซต์ก่อนแสดงกุญแจสีเขียว
PGP: การเข้ารหัสด้วยกุญแจสาธารณะและกุญแจส่วนตัวทำงานอย่างไร
เหตุใดจึงสามารถแชร์กุญแจสาธารณะ PGP ได้อย่างอิสระ แต่ห้ามแชร์กุญแจส่วนตัวเด็ดขาด
เวลา/ตัวเลข
Unix time: เหตุใดคอมพิวเตอร์จึงนับเวลาตั้งแต่ปี 1970
เหตุใดวันที่ 1 มกราคม 1970 จึงกลายเป็นจุดอ้างอิงเวลาสำหรับระบบคอมพิวเตอร์ส่วนใหญ่
Cron expression: วิธีถอดรหัสตารางเวลาทำงาน
วิธีถอดรหัส expression อย่าง */15 * * * * และรู้แน่ชัดว่างานจะรันเมื่อไหร่
ระบบเลข: เหตุใดจึงมีระบบเลขฐานสอง ฐานแปด และฐานสิบหก
เหตุใดสี #FF5733 ใน CSS จึงเขียนด้วยเลขฐานสิบหกแทนที่จะเป็นฐานสิบ
Bitwise operation: AND, OR และ XOR ทำงานอย่างไรในระดับบิต
bitwise AND ต่างจาก logical AND อย่างไร และเหตุใดจึงต้องทำงานกับบิตแต่ละตัวของตัวเลข
ผลต่างวันที่: เหตุใดการนับวันจึงซับซ้อนกว่าที่คิด
เหตุใดการลบวันที่แบบไร้เดียงสาจึงอาจให้ผลลัพธ์ผิดพลาดเพราะปีอธิกสุรทิน
การคำนวณอายุ: เหตุใดจึงไม่ใช่แค่การลบปีธรรมดา
เหตุใดการลบปีเกิดแบบง่าย ๆ จึงอาจให้อายุมากกว่าความจริงหนึ่งปี
เขตเวลา: เหตุใด UTC จึงไม่ใช่สิ่งเดียวกับ GMT
เหตุใด UTC จึงไม่เคยเปลี่ยนแปลงสองครั้งต่อปี ในขณะที่เวลาลอนดอน (GMT/BST) เปลี่ยนแปลง
เครื่องคำนวณระยะเวลา: วิธีบวกชั่วโมง นาที และวินาทีอย่างถูกต้อง
เหตุใดเมื่อบวกนาทีและวินาทีจึงต้อง "ทด" เศษไปยังหลักถัดไป เหมือนกับการบวกเลขฐานสิบ
ISO 8601 Duration: วิธีเขียนระยะเวลาในรูปแบบมาตรฐาน
เหตุใด PT1H30M จึงหมายถึง "1 ชั่วโมง 30 นาที" ไม่ใช่ "1 นาที 30 ชั่วโมง"
หมายเลขสัปดาห์: เหตุใดแต่ละประเทศจึงนับสัปดาห์ต่างกัน
เหตุใดวันที่ 1 มกราคมจึงอยู่ในสัปดาห์ที่ 52 หรือ 53 ของปีก่อนหน้าบางครั้งตามมาตรฐาน ISO 8601
เลขโรมัน: ระบบที่ไม่มีเลขศูนย์และไม่มีหลักค่าประจำตำแหน่งทำงานอย่างไร
เหตุใด IV จึงหมายถึง 4 ไม่ใช่ 6 และกฎการลบทำงานอย่างไรในเลขโรมัน
IEEE 754: เหตุใด 0.1 + 0.2 จึงไม่เท่ากับ 0.3 ในโค้ด
เหตุใดเกือบทุกภาษาโปรแกรมจึงแสดงผล 0.1 + 0.2 เป็น 0.30000000000000004
ตัวเลขเป็นคำอ่าน: เหตุใดต้องแปลงตัวเลขเป็นคำ
เหตุใดเอกสารธนาคารจึงเขียนจำนวนเงินทั้งเป็นตัวเลขและคำอ่านพร้อมกัน
เครือข่าย/HTTP
การแยกส่วน URL: ที่อยู่เว็บประกอบด้วยส่วนใดบ้าง
ส่วนแฟรกเมนต์ของ URL (หลัง #) ไม่เคยถูกส่งไปยังเซิร์ฟเวอร์เลย มีแต่เบราว์เซอร์เท่านั้นที่ประมวลผล
คิวรีสตริงกับ JSON: อะไรเหมาะกว่าสำหรับส่งข้อมูลที่ซับซ้อน
เหตุใดจึงไม่มีวิธีมาตรฐานสำหรับการส่งอาร์เรย์ผ่านคิวรีสตริง
User-Agent: เหตุใด Chrome ถึงมีคำว่า "Mozilla" และ "Safari"
เหตุใด User-Agent ของ Chrome จึงอ้างตัวว่าเป็น "Mozilla" และ "Safari" ทั้งที่ไม่ใช่
HTTP Basic Auth: เฮดเดอร์ Authorization ถูกสร้างขึ้นอย่างไร
Base64 ไม่ใช่การเข้ารหัส — รหัสผ่านของ Basic Auth สามารถถูกถอดรหัสได้ในไม่กี่วินาที
HTTP Headers: เมทาดาต้าที่มาพร้อมกับทุกคำขอและการตอบกลับ
เฮดเดอร์ Content-Type บอกเบราว์เซอร์อย่างไรว่าจะจัดการการตอบกลับเป็น HTML, JSON หรือรูปภาพ
คุกกี้: เหตุใดแอตทริบิวต์ Secure, HttpOnly และ SameSite จึงสำคัญ
เหตุใดแอตทริบิวต์ HttpOnly จึงช่วยป้องกันไม่ให้คุกกี้เซสชันถูกขโมยในการโจมตี XSS
ข้อผิดพลาด CORS: เหตุใดเบราว์เซอร์จึงบล็อกการตอบกลับ
เหตุใดคำขอที่ใช้งานได้ใน Postman จึงเกิดข้อผิดพลาด CORS ในเบราว์เซอร์
Email Headers: SPF, DKIM และ DMARC ตรวจสอบผู้ส่งจริงอย่างไร
เหตุใดต้องอ่านเฮดเดอร์ Received จากล่างขึ้นบนเพื่อติดตามเส้นทางจริงของอีเมล
SEO
Meta tag: แท็กไหนที่ส่งผลจริงต่อการค้นหาและโซเชียลมีเดีย
เหตุใดเครื่องมือค้นหาบางครั้งจึงเพิกเฉยต่อ meta description ของคุณและสร้าง snippet ขึ้นเองจากเนื้อหาในหน้า
robots.txt: บอตค้นหาตัดสินใจอย่างไรว่าอะไรสามารถรวบรวมข้อมูลได้
เหตุใดกฎ Disallow ใน robots.txt จึงไม่ซ่อนหน้าจากผลการค้นหา หากมีลิงก์จากที่อื่นชี้มาที่หน้านั้น
Sitemap.xml: เหตุใดเครื่องมือค้นหาจึงต้องการแผนผังเว็บไซต์
เหตุใดการมีอยู่ใน sitemap.xml จึงไม่รับประกันว่าเครื่องมือค้นหาจะจัดทำดัชนีหน้านั้น
Favicon: เหตุใดไอคอนเดียวจึงต้องมีขนาดและรูปแบบมากมายขนาดนี้
เหตุใด favicon.ico เพียงไฟล์เดียวจึงไม่เพียงพออีกต่อไปสำหรับการแสดงผลที่ถูกต้องบนทุกอุปกรณ์
การสร้าง sitemap.xml: วิธีประกอบแผนผังเว็บไซต์โดยอัตโนมัติ
เหตุใดเครื่องมือค้นหาส่วนใหญ่จึงเพิกเฉยต่อฟิลด์ priority ใน sitemap.xml แม้ว่าจะเป็นส่วนหนึ่งของข้อกำหนด
พัฒนาเว็บ
HEX, RGB, HSL: ทำไมสีจึงมีวิธีเขียนหลายแบบ
เหตุใดนักออกแบบจึงมักเลือกใช้ HSL แทน HEX เมื่อต้องเลือกโทนสีด้วยตนเอง
การมินิฟาย CSS: อะไรถูกลบออกจากไฟล์บ้างและเพื่ออะไร
เหตุใด CSS ที่ถูกมินิฟายแล้วยังคงทำงานในเบราว์เซอร์ได้เหมือนเดิม แม้จะอ่านยากขึ้นสำหรับมนุษย์
การมินิฟาย JavaScript: ความแตกต่างระหว่างการมินิฟายกับการอ๊อบฟัสเคต
เหตุใดโค้ดที่ถูกมินิฟายจึงยังพออ่านได้หากตั้งใจ แต่โค้ดที่ถูกอ๊อบฟัสเคตแล้วอ่านแทบไม่ออก
การมินิฟาย HTML: เหตุใดช่องว่างในมาร์กอัปจึงมีความสำคัญ
เหตุใดการลบช่องว่างใน <pre> หรือ textarea อาจทำให้หน้าเว็บแสดงผลผิดพลาด ต่างจากส่วนอื่น ๆ
CSS Gradient: linear ต่างจาก radial และ conic อย่างไร
เหตุใด conic-gradient จึงเหมาะกับแผนภูมิวงกลม ส่วน radial เหมาะกับเอฟเฟกต์แสงจุด
อัลกอริทึม Luhn: ตรวจสอบความถูกต้องของหมายเลขบัตรอย่างไร
เหตุใดหมายเลขบัตรที่ผ่านการตรวจสอบด้วยอัลกอริทึม Luhn จึงไม่ได้หมายความว่าบัตรนั้นมีอยู่จริง
IBAN: หมายเลขบัญชีธนาคารระหว่างประเทศมีโครงสร้างอย่างไร
เหตุใดตัวอักษรสองตัวแรกใน IBAN จึงเป็นรหัสประเทศ ไม่ใช่ส่วนหนึ่งของหมายเลขบัญชี
QR Code: ลิงก์ถูกบรรจุลงในตารางพิกเซลได้อย่างไร
เหตุใด QR Code ที่มีโลโก้อยู่ตรงกลางจึงยังสแกนได้ แม้ภาพบางส่วนจะถูกบัง
บาร์โค้ด: Code 128 ต่างจาก EAN-13 อย่างไร
เหตุใดสินค้าในร้านค้าส่วนใหญ่จึงใช้ EAN-13 แทนที่จะเป็น Code 128
ภาพ Placeholder: เหตุใดจึงต้องใช้ภาพตัวแทนในการพัฒนา
เหตุใดนักพัฒนาเว็บจึงจงใจใส่กล่องสีเทาแทนภาพถ่ายจริงในขั้นตอนการพัฒนา