Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,913

HOME > PHP > PHP Forum > basename($_FILES["file"]["name"]) ใช้กับไฟล์ภาษาไทยไม่ได้



 

basename($_FILES["file"]["name"]) ใช้กับไฟล์ภาษาไทยไม่ได้

 



Topic : 134411



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์




ผมลองทดสอบให้แสดงชื่อไฟล์ภาษาไทย
basename($_FILES["file"]["name"])
แต่ดันมาเเต่นามสกุลไฟล์

ผมจะแก้ไขปัญหาอย่างไร

คือผมอัพโหลดไฟล์เป็นภาษาไทย ต้องการให้ผู้อื่นมาดาวน์โหลด ใรเมื่อไฟล์ไม่ใข่ภาษาไทย ผู้โหลดคง งง กัน จนดาวน์โหลดไม่ถูกอะครับ



Tag : PHP







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-10-26 23:41:18 By : mtts10448 View : 100 Reply : 16
 

 

No. 1



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


แก้ได้ละครับ setlocale(LC_ALL,"th_TH.UTF-8");
แก้เป็นวันกว่าจะได้






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-26 23:50:15 By : mtts10448
 


 

No. 2



โพสกระทู้ ( 3,519 )
บทความ ( 6 )

Hall of Fame 2012

สถานะออฟไลน์


ตอบความคิดเห็นที่ : 1 เขียนโดย : mtts10448 เมื่อวันที่ 2019-10-26 23:50:15
รายละเอียดของการตอบ ::
แปลกนะ Code เป็นภาษาอังกฤษ แต่ Save เป็นภาษาไทย เดี๋วรู้

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-27 10:54:06 By : Genesis™
 

 

No. 3



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 2 เขียนโดย : Genesis™ เมื่อวันที่ 2019-10-27 10:54:06
รายละเอียดของการตอบ ::
คืออะไรหรอครับ ผมก็มือไหม่ งงๆ

ไปหาเจอในเว็บฝรั่ง สรุปมันได้เฉย ทั้งที่ไปปรับหน้าเว็บ ปรับ Mysql เป็น UTF-8 ปรับไปปรับมา ก็ยังไม่ได้



ประวัติการแก้ไข
2019-10-27 22:38:22
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-27 22:37:03 By : mtts10448
 


 

No. 4



โพสกระทู้ ( 3,519 )
บทความ ( 6 )

Hall of Fame 2012

สถานะออฟไลน์


ไป save รูปใน google ดู ชื่อ File เป็นแบบไหนทำให้มัน standard หน่อย
คนสร้าง php สร้างด้วย eng
code เลยเป็น eng
บางทีมันก็น่าจะมองออกกับเรื่องเล็กๆ


ประวัติการแก้ไข
2019-10-27 22:53:10
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-27 22:51:04 By : Genesis™
 


 

No. 5



โพสกระทู้ ( 3,539 )
บทความ ( 8 )



สถานะออฟไลน์


เดี๋ยวมีปัญหาตามมาเพียบ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 05:07:50 By : mr.v
 


 

No. 6



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


ไฟล์ใน Server อะ ผม Save เป็นภาษาอังกฤษกับตัวเลข
ส่วนที่ว่ามัน Save เป็น ค่าว่างตมด้วยนามสกุลมันคือใน MySQL อะครับ
ผมก็เริ่มสับสน จะแก้ปัญหายังไงละครับให้ คนโหลดรู้ชื่อไฟล์เป็นภาษาไทย ถ้าไม่เขียนใน DB เป็นภาษาไทย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 13:57:59 By : mtts10448
 


 

No. 7



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


ปันหาคือ basename($_FILES["file"]["name"]) มันอ่านไฟล์ภาษาไทยได้ เเต่พอจะเอาไป Insert ลง DB มันดันกลายเป็นค่าว่าง ทั้งๆที่ใน Localhost มันทำได้ พออัพขึ้น Server มันดัน Insert ไม่ได้
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 14:02:45 By : mtts10448
 


 

No. 8



โพสกระทู้ ( 3,519 )
บทความ ( 6 )

Hall of Fame 2012

สถานะออฟไลน์


ตอบความคิดเห็นที่ : 7 เขียนโดย : mtts10448 เมื่อวันที่ 2019-10-28 14:02:45
รายละเอียดของการตอบ ::
ยังไม่ GET อีกหรอกครับว่า เมื่อมีการ upload File ควรเป็นภาษาอังกฤษ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 14:15:54 By : Genesis™
 


 

No. 9



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 8 เขียนโดย : Genesis™ เมื่อวันที่ 2019-10-28 14:15:54
รายละเอียดของการตอบ ::
พูดตามตรงนะครับ ว่ายัง
ผมมือใหม่จริงๆ ยังไงชี้เเนะเป็นวิทยาทานด้วยครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 18:46:47 By : mtts10448
 


 

No. 10



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


อ้ออีกอย่างครับ สมมุติ ผมอัพโหลดไฟล์ชื่อ กกกก ขขขข.pdf ผมลองให้มันโชว์ชื่อไฟล์ มันดันโชว์ ขขขข.pdf ส่วน กกกก มันไม่ตามมาด้วยครับ


ประวัติการแก้ไข
2019-10-28 19:12:24
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 19:00:18 By : mtts10448
 


 

No. 11



โพสกระทู้ ( 3,539 )
บทความ ( 8 )



สถานะออฟไลน์


ปกติผมเคยทำนะ ตอนอัพโหลดมันทำได้ทั้งนั้นแหละ จากฝั่งผู้ใช้มันบ่ยั่น จะไฟล์ภาษาไทยภาษาอะไรก็ได้ทั้งนั้น
พออัพโหลดแล้ว ผมเก็บชื่อดั้งเดิมเอาไว้ เช่นไฟล์เป็นภาษาไทยก็เก็บเป็นภาษาไทยตามชื่อที่ผู้ใช้ตั้งเอาไว้เลย เก็บเฉพาะชื่อ พูดง่ายๆคือเก็บชื่อเป็น string ลงฐานข้อมูล
ส่วนตัวไฟล์จริงๆที่ทำการอัพโหลด ผมเปลี่ยนเป็นภาษาอังกฤษกับตัวเลข วิธีที่ใช้บ่อยคือเอามา sha1() หรือ md5() ไปซะ เช่น md5($_FILES['inputname']['name'] . date('Y-m-d H:i:s')) แบบนี้ตัวไฟล์จริงๆมันก็จะปลอดภัย ข้อมูลที่ผู้ใช้อัพโหลดมาคือชื่อไฟล์เดิมก็ยังอยู่ในฐานข้อมูลแต่ไม่มีตัวไฟล์จริงๆ เอาไว้ใช้ทีหลังได้

ส่วนกรณีการเก็บเฉพาะชื่อเดิมๆนั้น ผมไม่ต้องใช้ setlocale อะไรเลย เอามาจาก $_FILES['inputname']['name'] ตรงๆเลย ดังนั้นผู้ใช้ตั้งชื่อไฟล์บ้าๆบอๆอะไรก็ได้ มันก็รับเข้ามาทั้งๆอย่างนั้น แต่ตัวไฟล์จริงๆเป็นภาษาอังกฤษกับตัวเลขไปซะ

ผมมีทำ class upload แจก ลองเอาไปใช้หรือแกะโค้ดบางส่วนไปใช้ตามแต่เห็นสมควรก็ได้
https://github.com/Rundiz/upload
license MIT จะทำอะไรก็ทำ


---- edit เพิ่มเติมให้อีกนิด -------------
https://www.php.net/manual/en/function.basename.php
Quote:
Caution
basename() is locale aware, so for it to see the correct basename with multibyte character paths, the matching locale must be set using the setlocale() function.


เขาบอกว่า ตัวฟังก์ชั่น basename() มันทำงานกับ locale ดังนั้นคุณจึงต้อง setlocale แต่ถ้าคุณใช้วิธี explode คุณไม่ต้องกังวลเรื่อง locale เลย และไม่ต้องกังวลด้วยว่าจะภาษาอะไรเพราะถ้า setlocale มันก็ไปเน้นกับภาษาใดภาษาหนึ่งอยู่ดี ไม่รองรับภาษาหลากหลายจากทั่วโลก
ตัวอย่างถ้าใช้ explode
Code (PHP)
$nameExp = explode('.', $_FILES['inputfile']['name']);
$fileExtOnly = $nameExp[(count($nameExp) - 1)];
unset($nameExp[(count($nameExp) - 1)]);// เอา array สุดท้ายที่เป็น extension ออก
$fileNameOnly = implode('.', $nameExp);



ประวัติการแก้ไข
2019-10-28 19:43:41
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 19:32:40 By : mr.v
 


 

No. 12



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 11 เขียนโดย : mr.v เมื่อวันที่ 2019-10-28 19:32:40
รายละเอียดของการตอบ ::
ที่คุณพูดมาเหมือนที่ผมทำตอนนี้เป๊ะเลยครับ ไฟล์ที่อยู่บน SERVER จริงๆคือภาษาอังกฤษ แต่ชื่อไฟล์ที่ไม่มีอยู่จริงคือภาษาไทย

ปัญหาก่อนหน้านี้คือ เมื่ออัพโหลดไฟล์เป็นภาษาไทย ซึ่งถ้าหากไฟล์นั้น มี่การเว้นวรรคที่ชื่อ เช่น กกกก ขขขข.pdf ฟังชั่น basename มันจะไม่อ่าน กกกก ครับ

ส่วนตอนนี้แก้ไขปัญหาได้เเล้วครับ โดยการเอา Basename ออก เหลือเเต่ $_FILES['inputname']['name']

ไม่รู้ว่าการอัพโหลดไฟล์แบบนี้จะมีปัญหาภายหลังมั้ยครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 19:39:23 By : mtts10448
 


 

No. 13



โพสกระทู้ ( 3,519 )
บทความ ( 6 )

Hall of Fame 2012

สถานะออฟไลน์


ตอบความคิดเห็นที่ : 10 เขียนโดย : mtts10448 เมื่อวันที่ 2019-10-28 19:00:18
รายละเอียดของการตอบ ::
คำตอบคือ : เมื่อมีการ upload อย่า save ชื่อ File เป็นภาษาไทย
ถ้าง่ายๆควร rename file เป็น วันเดือนปีชั่วโมงนาทีวินาที แทน จะได้ไม่มีปัญหาเกี่ยวกับภาษาซึ่งการใช้ภาษา Locate ที่ไม่ใช่ภาษาอังกฤษมันไม่ควร
Example :
Code (PHP)
$explode=explode('.',$_FILES["file"]["name"]); //รูปวิว.jpg,
$rename=date('YmdHis').'.'.$explode[1]; //20191027074005.jpg


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 19:40:20 By : Genesis™
 


 

No. 14



โพสกระทู้ ( 3,539 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 12 เขียนโดย : mtts10448 เมื่อวันที่ 2019-10-28 19:39:23
รายละเอียดของการตอบ ::
ผมลองดูแล้วมันก็แสดงได้ปกตินะ
Code (PHP)
<?php
$currentLocale = setlocale(LC_ALL, 0);
echo 'current locale<br>' . PHP_EOL;
var_dump($currentLocale);

$fileName = '/var/www/upload/กกก ขขข.pdf';

echo 'file name: ' . $fileName . '<br>' . PHP_EOL;


var_dump(basename($fileName));// ออกมาเป็น กกก ขขข.pdf

ดังนั้นที่คุณได้แค่ ขขขข.pdf อย่างนั้นคงเป็นเพราะเหตุอื่นแล้ว

ส่วนกรณีที่ว่ามีปัญหาภายหลังมั้ย ถ้าเอามาใช้แค่บางอย่าง อย่างผมเคยใช้ตอนให้ force download แล้วตั้งชื่อเดิมให้ผู้ใช้ดาวน์โหลดกลับ มันก็ทำได้ ไม่มีปัญหาใดๆ แต่ถ้าเอามาใช้กับชื่อไฟล์จริงๆ มีปัญหาตามมาแน่ๆ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 19:55:57 By : mr.v
 


 

No. 15



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


Code
$newfilename = $person_id_upload.'_'.date('dmYHi'). '_' . rand(100, 9999) . '.' . end(explode(".",$fileName));


ตอนบันทึกไฟล์ผมเปลี่ยนชื่อครับเป็นภาษาอังกฤษ

ปัญหาตอนก่อนคือมันเขียนภาษาไทยลง DB ไม่ได้ เพราะ Basename มันไม่ยอมอ่านไฟล์ชื่อภาษาไทยที่มีเว้นวรรค ผมก็เพิ่งรู้

ถ้าจะให้ Basename อ่านได้ต้อง Setlocal

ตอนนี้ไม่ Basename ละคับ เอามาแบบนี้เลย
Code
$fileName = $_FILES["file"]["name"];



ประวัติการแก้ไข
2019-10-28 20:06:02
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 20:01:40 By : mtts10448
 


 

No. 16



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 14 เขียนโดย : mr.v เมื่อวันที่ 2019-10-28 19:55:57
รายละเอียดของการตอบ ::
ผมเอาภาษาไทยมาใช้เเค่เอามาแสดงในตาราง เพื่อให้กดดาวน์โหลดถูกอัน ว่าจะดาวน์โหลดไฟล์ชื่ออะไร ส่วนไฟล์ที่โหลดไป ชื่อเป็นภาษาอังกฤษคงไม่มีปันหาหรือป่าว

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-10-28 20:04:47 By : mtts10448
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : basename($_FILES["file"]["name"]) ใช้กับไฟล์ภาษาไทยไม่ได้
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่