วิกิพีเดีย:ศาลาชุมชน/อภิปราย/ถอดรหัสลิงก์ภายนอก

จากวิกิพีเดีย สารานุกรมเสรี

ลิงก์ภายนอกต่าง ๆ เช่น http://th.wikipedia.org/w/index.php?title=%E0%B9%81%E0%B8%A1%E0%B9%88%E0%B9%81%E0%B8%9A%E0%B8%9A:%E0%B8%81%E0%B8%A5%E0%B9%88%E0%B8%AD%E0%B8%87%E0%B9%80%E0%B8%AB%E0%B8%95%E0%B8%B8%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%93%E0%B9%8C%E0%B8%9B%E0%B8%B1%E0%B8%88%E0%B8%88%E0%B8%B8%E0%B8%9A%E0%B8%B1%E0%B8%99&oldid=3926057 ยาวเป็นอย่างมาก ถึงแม้ตามความจริงจะสามารถแสดงผลลิงก์ด้วยชื่อที่กำหนดเองโดย [ลิงก์... ชื่อใหม่...] ได้ แต่เวลากดเข้าไปแก้ไขก็จะเจอชื่อลิงก์เต็ม ๆ อยู่ดี ซึ่งสำหรับผมแล้วรู้สึกว่ารกตามาก ผมจึงมีความเห็นว่าควรถอดรหัสออกมาเป็น http://th.wikipedia.org/w/index.php?title=แม่แบบ:กล่องเหตุการณ์ปัจจุบัน&oldid=3926057 เป็นต้น (บางเว็บ เช่น stackoverflow.com ลิงก์ที่ถอดรหัสแล้วจะขาดเหลือแค่ http://th.wikipedia.org/w/index.php?title= เนื่องจากไม่รองรับอักขระอื่นเช่นภาษาไทยในลิงก์ แต่ที่วิกิพีเดียยังแสดงผลถูกต้องอยู่)

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

ผมเสนอเรื่องนี้กับคุณ Jutiphan แล้ว คุณ Jutiphan บอกให้ลองมาถามดูก่อนว่าคิดเห็นอย่างไร ผมจึงนำมาถามครับ --Nullzero (พูดคุย) 14:39, 6 มกราคม 2556 (ICT)


เรื่องทางเทคนิก

คุณ Jutiphan ยังบอกมาด้วยว่าจะมีปัญหาหรือเปล่าในการ decode URL (ตัดเรื่องประเด็น encoded URL ดูรกตาทิ้งไปก่อน) ซึ่งผมมีความเห็นดังนี้

  1. ผมเข้าใจว่าที่เวลาพวกเราคัดลอก url มาแล้ว browser มัน encode URL ให้อัตโนมัติก็เพราะบางเว็บไม่รองรับการแสดงผลอักขระอื่น ๆ ตามที่ได้กล่าวมาแล้วนี่แหละครับ แต่ในเมื่อวิกิพีเดียแสดงผลได้ ผมว่าก็ไม่น่ามีปัญหาอะไรนะครับ
  2. อีกประการหนึ่งที่ browser มัน encode URL ก็เพื่อ escape อักขระบางตัว ซึ่งการ decode ต้องรอบคอบเล็กน้อย ไม่สามารถ decode ได้โดยตรง ผมเคยพบปัญหาและได้ไปถามที่ http://stackoverflow.com/questions/13857253/decode-url-only-non-ascii-character แล้วก็ได้คำตอบกลับมาจากที่นั่น ผู้ใดสนใจก็ไปตามอ่านได้ครับ
    • สำหรับประเด็น URL ที่ไม่ได้ encode ด้วย UTF-8 ผมเคยลอง decode แล้วพบว่าโปรแกรมแจ้ง error ออกมาครับ เพราะฉะนั้นอาจจะดัก exception ไว้ว่าถ้าหากเกิดข้อผิดพลาดก็ให้ข้ามไป
  3. ทั้งนี้ผมเขียนเรียบร้อยแล้ว (และได้ให้ทำงานไปแล้วด้วย จนคุณ Jutiphan มาท้วงเนี่ยแหละ = =") หากใครอยากได้โค้ดของผมก็มาขอได้ครับ --Nullzero (พูดคุย) 14:39, 6 มกราคม 2556 (ICT)

เพราะฉะนั้นคงแยกเป็น 2 เรื่องคือ

  1. ถ้าไม่สนเรื่องว่าทางเทคนิกทำได้หรือไม่ มีความคิดเห็นกันอย่างไรบ้างครับ
  2. ทางเทคนิกทำได้หรือไม่ --Nullzero (พูดคุย) 14:39, 6 มกราคม 2556 (ICT)

การถอดรหัสพาธหรือเควียรีสตริงกลับเป็นตัวอักษรง่ายมาก เพราะมีฟังก์ชันสำเร็จรูปให้ใช้ แต่ปัญหาติดอยู่ตรงที่ เมื่อเป็นอักษรไทยแล้ว (หรืออักษรชุดอื่น ๆ) เบราว์เซอร์ต่าง ๆ กลับตีความไม่เหมือนกัน จากประสบการณ์ที่เจอคือ เมื่อคลิกลิงก์ ไฟร์ฟอกซ์ตีความอักษรไทยด้วย UTF-8 ซึ่งถูกต้อง (ความจริงคือมันตีความเป็น UTF-8 ทั้งหมดเลย) ในขณะที่ไออีและเบราว์เซอร์บางรุ่นตีความอักษรไทยเป็น TIS-620 (หรือแอสกี) เพราะระบบวินโดวส์ถูกตั้งไว้ให้ใช้โลเคลภาษาไทย ซึ่งแน่นอนว่าไม่ใช่ยูอาร์แอลที่ควรจะเป็นและมันก็โยงไปหน้าไหนก็ไม่รู้ นอกเสียจากว่าไออีหรือเบราว์เซอร์นั้นจะตั้งค่าพิเศษเพิ่มเติมว่าให้แปลผลด้วย UTF-8 เสมอ มีเดียวิกิไม่สามารถตรัสรู้ได้ว่ารหัสที่ส่งมาเป็น TIS-620 หรือรหัสอื่นเพราะทำงานบนพื้นฐาน UTF-8 เท่านั้น ส่วนเว็บไซต์อื่นอาจจะเข้ารหัสยูอาร์แอลด้วย UTF-8 หรือไม่ก็ได้ขึ้นอยู่กับเขาพัฒนาขึ้นมายังไง (เช่นบางเว็บใช้ Shift-JIS) เพื่อหลีกเลี่ยงปัญหานี้ผมจึงไม่สนับสนุนให้ถอดรหัสเป็นตัวอักษร และเมื่อยูอาร์แอลได้เข้ารหัสอยู่แล้วมันก็จะสามารถโยงไปยังหน้าที่ถูกต้องได้เสมอ ผมทราบถึงปัญหานี้เพราะผมมีอาชีพเป็นผู้พัฒนาเว็บ ซึ่งพยายามหลีกเลี่ยงการส่งข้อมูลน็อนแอสกีโดยไม่จำเป็นทางยูอาร์แอล
โดยสรุปคือลิงก์สามารถแปลงได้ แต่ไม่รับประกันว่ามันจะทำงานถูกต้อง ขึ้นอยู่กับคนเปิด และบางลิงก์ก็ไม่ใช่ยูนิโคด จะบังคับให้มันเป็นยูนิโคดก็ไม่ได้เช่นกัน ท้ายที่สุดก็ต้องปล่อยเลยตามเลย

--浓宝努 15:20, 6 มกราคม 2556 (ICT)

สำหรับเรื่องของทางเว็บเองที่ไม่ได้ใช้ UTF-8 ก็เป็นไปตามที่ชี้แจงไว้แล้ว ว่าสามารถตรวจจับได้จากการ decode ว่าเกิดข้อผิดพลาดขึ้นหรือไม่ ตัวอย่างเช่น

http://thainews.prd.go.th/view.php?m_newsid=255210200271&tb=N255210&news_headline=%E3%B9%CB%C5%C7%A7%20%BE%C3%D0%C3%D2%AA%B7%D2%B9%AA%D7%E8%CD%20%93%CA%D0%BE%D2%B9%C0%D9%C1%D4%BE%C5%94%20%E3%CB%E9%E1%A1%E8%A1%C3%C1%B7%D2%A7%CB%C5%C7%A7%AA%B9%BA%B7

ซึ่งไม่ได้เข้ารหัสด้วย UTF-8 แต่เป็น windows-874 เมื่อโปรแกรมตรวจพบก็จะข้ามทันที

เพราะฉะนั้นตอนนี้ปัญหาก็จะเป็นเกี่ยวกับเบราว์เซอร์ ซึ่งขอผมศึกษาก่อนว่าพอจะมีวิธีการแก้ไขหรือไม่ โดยเบื้องต้นผมได้ขอให้เพื่อนลองใช้ IE เปิดลิงก์วิกิพีเดียภาษาไทยโดยคลิกลิงก์ที่มีภาษาไทยต่าง ๆ ก็พบว่าสามารถทำได้ ไม่มีปัญหาแต่อย่างใด แต่เดี๋ยวผมจะไปศึกษาเพิ่มเพื่อให้มั่นใจว่าจะไม่มีปัญหาจริง ๆ

ก็ต้องขอขอบคุณคุณ octahedron80 สำหรับความรู้ต่าง ๆ ด้วยครับ ผมเองสารภาพเลยว่าไม่มีความรู้ด้านนี้เลยแม้แต่น้อย จะทำอะไรทีก็ต้องหา google ที = ="

ถ้าสุดท้ายได้ข้อสรุปว่าการ decode อาจจะสร้างปัญหาได้ เดี๋ยวผมจะแก้ไขการกระทำของบอตให้เรียบร้อย รวมถึง encode URL ที่เจอด้วย เพราะเห็นผู้ใช้หลาย ๆ คนก็พยายาม decode URL อยู่ด้วยเช่นเดียวกัน --Nullzero (พูดคุย) 16:38, 6 มกราคม 2556 (ICT)

ผมต้องระบุรายละเอียดว่า ไออีที่พบปัญหาตอนนั้นเป็นไออี6หรือ7 ถ้าจำไม่ผิด (มากับวินโดวส์เอกซ์พี) รุ่นหลังๆมานี้ไม่เจอปัญหา แต่ก็ยังวางใจไม่ได้ครับ เพราะลูกค้ามักจะยึดอยู่กับของเก่าไม่ยอมอัปเกรด (หรืออัปเกรดไม่ได้ก็ไม่รู้)
ปล. แบบรหัส Windows-874, ISO-8859-11, TIS-620 คล้ายกันอย่างมาก (เรียงตามจำนวนอักขระมากไปน้อย) ส่วนใหญ่ใช้แทนกันได้ แต่ผมเอ่ยเพียง TIS-620 เพราะมันเล็กสุด ISO-8859-11 มี NBSP เพิ่มเข้ามา และ Windows-874 มีอักขระต่อไปนี้ € … ‘ ’ “ ” • – — แทรกอยู่ด้วย --浓宝努 17:04, 6 มกราคม 2556 (ICT)
คุณ octahedron80 อธิบายมาชัดเจนอยู่แล้ว แต่สงสัยเพิ่มเติมว่าวิกิพีเดียหรือโครงการพี่น้องภาษาอื่นเขาจัดการกันอย่างไร โดยเฉพาะในภาษาอังกฤษ เขาก็ต้องมีลิงก์ภายนอกไปภาษาต่างๆ ร้อยพ่อพันแม่ยิ่งกว่าวิกิพีเดียภาษาไทยเสียอีก เป็นไปได้ไหมว่าต้องทำแม่แบบช่วยในการแสดงลิงก์ให้ถูกต้อง ทั้งสวยต่อตาและกดแล้วไปถึงที่ --taweethaも (พูดคุย) 03:46, 7 มกราคม 2556 (ICT)

ขอให้ข้อมูลเพิ่มเติม: ผู้ใช้:Phizaz แนะนำให้ผมไปลองที่ http://www.browserstack.com/ ซึ่งเป็นบริการทดสอบ browser ออนไลน์ (เป็นเหมือน vm) ผมเลือกการทำงานบน Windows XP โดยใช้ IE6 พบว่าไม่มีปัญหาดังกล่าวนะครับ ทั้งนี้อาจเป็นไปได้ว่ามีการปรับการตั้งค่าพิเศษแบบที่คุณ octahedron80 บอกก็ได้ จึงทำให้ไม่มีปัญหา (ผมเปิดดูไม่ได้เพราะระบบของเว็บกันให้ทำงานบน browser เท่านั้น) ก็อยากจะรบกวนผู้ที่มี IE6 ลองทดสอบดูด้วย (รอบตัวผมหาคอมพิวเตอร์ที่เป็น Win XP + IE6 ไม่ได้เลยจริง ๆ = =") --Nullzero (พูดคุย) 23:07, 7 มกราคม 2556 (ICT)

การใช้ตัวจำลองมาทดสอบ ผลอาจผิดพลาดได้ด้วยสาเหตุบางอย่าง (1) ก๊อปปี้ยูอาร์แอลไปลงที่นั่นโดยไม่ได้พิมพ์เอง ยูอาร์แอลถูกเข้ารหัสอยู่แล้วโดยไม่รู้ตัว โดยเบราว์เซอร์ของเรา (2) ระบบเข้ารหัสยูอาร์แอลโดยอัตโนมัติก่อนนำไปประมวลผล ทำให้สามารถไม่ทราบความแตกต่างได้ --浓宝努 16:28, 13 มกราคม 2556 (ICT)
รับทราบครับ เข้าใจและไม่ติดใจเรื่องนี้แล้ว --Nullzero (พูดคุย) 18:18, 15 มกราคม 2556 (ICT)