บทความสำหรับนักพัฒนา

คำอธิบายรูปแบบการเข้ารหัส การทำงานกับ 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: เหตุใดจึงต้องใช้ภาพตัวแทนในการพัฒนา

เหตุใดนักพัฒนาเว็บจึงจงใจใส่กล่องสีเทาแทนภาพถ่ายจริงในขั้นตอนการพัฒนา