PDA

View Full Version : آپلود فایل فارسی



fa.m2541367
یک شنبه 08 اردیبهشت 1392, 00:17 صبح
سلام
یه مشکلی با آپلود فایل دارم من مثلا یه عکسی که اسمش فارسیه رو آپلود میکنم تو دیتابیسم فارسی درج میکنه اما تو پوشه ای که باید اپلود بشه اسمشcodingمیشه و در نتیجه وقتی میخواد نشون بده نمیتونه و جای عکس خالی بهم نشون میده چکار کنم که فارسی آپلود کنه؟؟؟؟؟؟؟؟؟؟؟

MMSHFE
یک شنبه 08 اردیبهشت 1392, 01:11 صبح
موقع ذخیره کردن به این شکل عمل کنید:


$name = iconv('utf-8', 'windows-1256', $_FILES['photo']['name']);
move_uploaded_file($_FILES['photo']['tmp_name'], 'uploads/' . $name);

ولی توی دیتابیس همون ['FILES['photo']['name_$ رو ذخیره کنید.
موقع نمایش هم با کد زیر اسم فایل رو بخونید و نشون بدین:


$name = iconv('utf-8', 'windows-1256', $row['filename']);
echo '<img src="uploads/'. $name . '" />';

دلیل این بهم ریختگی اینه که شما توی دیتابیس و با PHP دارین تحت کدگذاری یونیکد کار میکنید ولی ویندوز میخواد با کدگذاری عربی (Windows-1256) اسم فایل رو ذخیره کنه که تابع iconv این مشکل رو رفع میکنه.

saeidpsl
یک شنبه 08 اردیبهشت 1392, 01:53 صبح
سلام مهندس
این بخش ارور میده


$name = iconv('utf-8', 'windows-1256', $row['filename']);
مثلا من سلام رو میخوام تبدیل کنم


echo iconv('utf-8', 'windows-1256', "ÓáÇã");

این ارور رو میده
Notice: iconv(): Detected an illegal character in input string
بعد اینجوری نوشتم مشکل حل شد


echo iconv("CP1256", "UTF-8", "ÓáÇã");

MMSHFE
یک شنبه 08 اردیبهشت 1392, 13:26 عصر
شرمنده الآن دیدم اشتباهاً کدگذاری source و destination رو جابجا نوشتم. علتش فکر کنم بخاطر کارکترهای «ك» و «ي» هست که توی عربی هست ولی توی فارسی «ک» و «ی» (بدون همزه و دو نقطه) داریم. برای این راه هم میتونید اینطوری کار کنید:

iconv('windows-1256', 'utf-8', str_replace('ك', 'ک', str_replace('ي', 'ی', $row['filename']));

fa.m2541367
یک شنبه 08 اردیبهشت 1392, 13:27 عصر
ببخشید با این کدی که دادین یه مشکلی دارم اونم اینکه تو صفحه ای که فرمم توش هست باید تگ metaرو بردارم تا این کد درست کار کنه وگرنه وقتی echo گرفتم دیدم دیگه یونیکد هم نمیکه بلکه بجای اسم فارسی چند تا ؟؟ میذاره اگه بخوام تگ meta رو هم بردارم که کل صفحم بهم میریزه

fa.m2541367
یک شنبه 08 اردیبهشت 1392, 13:44 عصر
ببینین این کدا
103422103423

fa.m2541367
یک شنبه 08 اردیبهشت 1392, 13:50 عصر
چکار کنم نمیشه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

MMSHFE
یک شنبه 08 اردیبهشت 1392, 14:17 عصر
کد زیر رو اجرا و تست کنید و باهاش چند فایل آپلود کنید (اسامی فارسی و انگلیسی و...) ببینید چطور کار میکنه:


<?php
function ToArabic($unicode) {
return iconv('utf-8', 'windows-1256', str_replace('ک', 'ك', str_replace('ی', 'ي', $unicode)));
}
function ToUnicode($arabic) {
return str_replace('ك', 'ک', str_replace('ي', 'ی', iconv('windows-1256', 'utf-8', $arabic)));
}
if(isset($_FILES['file'])) {
$file = &$_FILES['file'];
$name = ToArabic($file['name']);
move_uploaded_file($file['tmp_name'], $name);
}
?>
<!doctype html>
<html>
<head>
<title>Upload</title>
<meta charset="utf-8" />
</head>
<body>
<form action="" enctype="multipart/form-data" method="post">
File: <input name="file" type="file" />
<input type="submit" value="Upload" />
</form>
<p>Files:</p>
<?php
$files = scandir('.');
$exts = array('doc', 'txt');
foreach($files as $file) {
if (in_array(strtolower(end(explode('.', $file))), $exts)) {
echo '<p>' . ToUnicode($file) . '</p>' . PHP_EOL;
}
}
?>
</body>
</html>

fa.m2541367
یک شنبه 08 اردیبهشت 1392, 14:44 عصر
هیچی echoنمیکه

fa.m2541367
یک شنبه 08 اردیبهشت 1392, 14:46 عصر
ببخشید اشتباه کردم فایل انگلیسی رو آپلود میکنه اما فارسی رو کدینگ میکنه

MMSHFE
یک شنبه 08 اردیبهشت 1392, 16:02 عصر
فایل با پسوند txt. یا doc. با اسامی فارسی و انگلیسی آپلود کنید. باید بعد از آپلود، اسم فایل رو به درستی توی صفحه نشون بده و وقتی توی Explorer نگاه میکنید هم به شکل درست اسم فایل رو ذخیره کرده باشه.

fa.m2541367
یک شنبه 08 اردیبهشت 1392, 23:14 عصر
همین کارو کردم توی Explorer نگاه میکنم بازم درست ذخیره نمیشه کدینگ میکنه بنظرتون مشکل از کجاست؟؟؟؟

MMSHFE
یک شنبه 08 اردیبهشت 1392, 23:34 عصر
کد درسته و برای من کامل و صحیح کار میکنه. خود فایل اسکریپت رو هم با کدگذاری UTF-8 without BOM ذخیره کنید. اگه باز هم مشکل رفع نشد، یک TeamViewer نصب کنید و نام کاربری و رمز عبور Remote Control رو برام پیام خصوصی کنید تا به سیستم شما وصل بشم و روی سیستم خودتون اسکریپت رو درست کنم.