A-AA+then

rawurlencode()

2,468

พอดีลองใช้ 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 (ตามที่ขีดเส้นใต้ครับ)

มีใครพอจะทราบวิธีแก้ไขบ้างมั้ยครับ

4 ความคิดเห็น

555+++

คำสั่ง rawurlencode เนี่ยเขามีไว้ใช้กับ URL ครับ ไม่ได้เอาไว้ใช้กับ path ดังนั้นถ้าเอาค่าที่ได้มาใช้กีบการ include จะไม่ถูกต้องครับ

อีกเรื่องนึง Server แต่ละชนิด อาจเก็บชื่อไฟล์ไม่เมือนกันครับ เช่น บน linux เก็บเป็น UTF-8 มันก็จะอ่านได้ แต่บน Windows เก็บเป็น Ansi ก็จะอ่านไม่ออกครับ

ถ้าอยากจะลอง ก็ลองแปลงภาษาดูครับ
1

เอ....

ผมก็เอามาใช้กับ url นี่หน่า <a href="<? echo rawurlencode('ภาษาไทย'); ?>.php">ภาษาไทย</a> ไม่ถูกหรอครับ

เครื่องที่ผมใช้ (localhost) เป็น window ส่วน server ก็เป็น window เหมือนกัน

แล้วทำไม เครื่องของผม (localhost) ถึงหาหน้านั้นไม่เจอ แต่ บน server กลับหาเจอ

แล้วลองแปลงภาษาที่ว่านี่คือเปลี่ยน charset หรือเปล่าครับ

ถ้าใช่ ลองเปลี่ยนส่วนของหน้าเว็บ หรือว่า php.ini ครับ


2

ไม่เกี่ยวกับ ผมหมายถึง มันจะใช้กีบ URL เช่น http://xxxx...... ได้เท่านั้น แต่ไม่สามารถใช้กับการ include ไฟล์ได้ครับ

โดยปกติแล้ว Server จะรับ URL ในรูปที่เข้ารหัสมาหรือไม่ก็ได้ครับ แต่การ include ต้องใช้ค่าที่ส่งมาเท่านั้นครับ ดังนั้นถ้า charset ไม่ตรงก็อาจหาไม่เจอได้ครับ

การแปลงที่ว่าก็เช่นการใช้ iconv() แปลงครับ

ปกติแล้วเราไม่ควรใช้ชื่อไฟล์หรือ folder เป็นภาษาไทยนะครับ อาจหาไม่เจอเอาง่ายๆ โดยเฉพาะ เมือนำไปใช้บน Server ต่างๆกัน ผมก็เคยเจอ case นี้เหมือนกันครับ จนปัจจุบัน ผมเลิกใช้ชื่อไฟล์ภาษาไทยอย่างสิ้นเชิงแล้ว

และหากจะถามว่าแล้วทำไมเว็บผมถึงใช้ URL ภาษาไทยได้ ผมตอบได้เลยครับว่าเป็น mod_rewrite ครับ และก็เป็นการเรียกไฟล์จากฐานข้อมูล ไม่ได้เรียกจาก Server จริงๆครับ มันเลยไม่ได้มีไฟล์ภาษาไทยบน Server จริงๆ
3

ออ เป็นอย่างนี้นี่เอง

host ผมเป็น window ไม่สามารถใช้ .htaccess ได้ และเป็น iis ก็ไม่สามารถใช้ mod_rewrite ได้ใช่มั้ยครับ

T__T

ยังไงก็ขอบคุณมากครับ

4
^