rawurlencode()
พอดีลองใช้ rawurlencode() ดูครับ แล้วติดปัญหานิดหน่อยครับ
// ------------------------------------ index.php ------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ทดสอบภาษาำไทย</title>
</head>
<body>
<a href="<? echo rawurlencode('ภาษาไทย'); ?>.php">ภาษาไทย</a>
</body>
</html>
// ------------------------------------ ภาษาไทย.php ------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ทดสอบภาษาำไทย</title>
</head>
<body>
<h1>Hello world</h1>
</body>
</html>
จาก code ด้านบน พอผมทดสอบดูในเครื่องตัวเอง ปรากฏว่า มันแสดง error ว่า
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Fatal error: Unknown: Failed opening required 'C:/AppServ/www/test_rawurlencode/เธ เธฒเธฉเธฒเนเธ—เธข.php' (include_path='.;C:\php5\pear') in Unknown on line 0
ตามรูปที่ 2 (ตามไฟล์แนบ)
แต่พอผม upload ขึ้น server มันกลับแสดงผลได้ถูกต้อง ตามรูปที่ 3 (ตามไฟล์แนบ)
ตรงนี้ ผมพอจะเดาได้ว่า เครื่องผมคงจะตั้งค่าอะไรเกี่ยวกับ php ผิดแน่ๆ เลย ใช่มั้ยครับ
ไม่รู้ว่าเป็นที่ charset ของ php (มีหรือเปล่าหว่า)
เพราะ error ที่แสดง จากหน้า ภาษาไทย .php มันกลายเป็น เธ เธฒเธฉเธฒเนเธ—เธข.php (ตามที่ขีดเส้นใต้ครับ)
มีใครพอจะทราบวิธีแก้ไขบ้างมั้ยครับ
// ------------------------------------ index.php ------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ทดสอบภาษาำไทย</title>
</head>
<body>
<a href="<? echo rawurlencode('ภาษาไทย'); ?>.php">ภาษาไทย</a>
</body>
</html>
// ------------------------------------ ภาษาไทย.php ------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ทดสอบภาษาำไทย</title>
</head>
<body>
<h1>Hello world</h1>
</body>
</html>
จาก code ด้านบน พอผมทดสอบดูในเครื่องตัวเอง ปรากฏว่า มันแสดง error ว่า
Warning: Unknown: failed to open stream: No such file or directory in Unknown on line 0
Fatal error: Unknown: Failed opening required 'C:/AppServ/www/test_rawurlencode/เธ เธฒเธฉเธฒเนเธ—เธข.php' (include_path='.;C:\php5\pear') in Unknown on line 0
ตามรูปที่ 2 (ตามไฟล์แนบ)
แต่พอผม upload ขึ้น server มันกลับแสดงผลได้ถูกต้อง ตามรูปที่ 3 (ตามไฟล์แนบ)
ตรงนี้ ผมพอจะเดาได้ว่า เครื่องผมคงจะตั้งค่าอะไรเกี่ยวกับ php ผิดแน่ๆ เลย ใช่มั้ยครับ
ไม่รู้ว่าเป็นที่ charset ของ php (มีหรือเปล่าหว่า)
เพราะ error ที่แสดง จากหน้า ภาษาไทย .php มันกลายเป็น เธ เธฒเธฉเธฒเนเธ—เธข.php (ตามที่ขีดเส้นใต้ครับ)
มีใครพอจะทราบวิธีแก้ไขบ้างมั้ยครับ
คำสั่ง rawurlencode เนี่ยเขามีไว้ใช้กับ URL ครับ ไม่ได้เอาไว้ใช้กับ path ดังนั้นถ้าเอาค่าที่ได้มาใช้กีบการ include จะไม่ถูกต้องครับ
อีกเรื่องนึง Server แต่ละชนิด อาจเก็บชื่อไฟล์ไม่เมือนกันครับ เช่น บน linux เก็บเป็น UTF-8 มันก็จะอ่านได้ แต่บน Windows เก็บเป็น Ansi ก็จะอ่านไม่ออกครับ
ถ้าอยากจะลอง ก็ลองแปลงภาษาดูครับ
เครื่องที่ผมใช้ (localhost) เป็น window ส่วน server ก็เป็น window เหมือนกัน
แล้วทำไม เครื่องของผม (localhost) ถึงหาหน้านั้นไม่เจอ แต่ บน server กลับหาเจอ
แล้วลองแปลงภาษาที่ว่านี่คือเปลี่ยน charset หรือเปล่าครับ
ถ้าใช่ ลองเปลี่ยนส่วนของหน้าเว็บ หรือว่า php.ini ครับ
โดยปกติแล้ว Server จะรับ URL ในรูปที่เข้ารหัสมาหรือไม่ก็ได้ครับ แต่การ include ต้องใช้ค่าที่ส่งมาเท่านั้นครับ ดังนั้นถ้า charset ไม่ตรงก็อาจหาไม่เจอได้ครับ
การแปลงที่ว่าก็เช่นการใช้ iconv() แปลงครับ
ปกติแล้วเราไม่ควรใช้ชื่อไฟล์หรือ folder เป็นภาษาไทยนะครับ อาจหาไม่เจอเอาง่ายๆ โดยเฉพาะ เมือนำไปใช้บน Server ต่างๆกัน ผมก็เคยเจอ case นี้เหมือนกันครับ จนปัจจุบัน ผมเลิกใช้ชื่อไฟล์ภาษาไทยอย่างสิ้นเชิงแล้ว
และหากจะถามว่าแล้วทำไมเว็บผมถึงใช้ URL ภาษาไทยได้ ผมตอบได้เลยครับว่าเป็น mod_rewrite ครับ และก็เป็นการเรียกไฟล์จากฐานข้อมูล ไม่ได้เรียกจาก Server จริงๆครับ มันเลยไม่ได้มีไฟล์ภาษาไทยบน Server จริงๆ
ออ เป็นอย่างนี้นี่เอง
host ผมเป็น window ไม่สามารถใช้ .htaccess ได้ และเป็น iis ก็ไม่สามารถใช้ mod_rewrite ได้ใช่มั้ยครับ
T__T
ยังไงก็ขอบคุณมากครับ