PDA

View Full Version : تابع iconv



rash44
دوشنبه 23 شهریور 1394, 16:10 عصر
سلام
در زمان ذخیره اطلاعات در sql server از تابع iconv برای تمامی متغیرها استفاده می کنم . در اولین بار که برنامه اجرا میشه هیچ مشکلی وجود نداره و برای بار دوم به بعد یک خطا صادر میشه و تابع فوق عمل نمی کنه و به جای داده ها null قرار می گیره .

لطفا راهنمائی کنید



$name=$_POST['name'];
$name=iconv("UTF-8", "windows-1256", $name);
//
$family=$_POST['family'];
$family=iconv("UTF-8", "windows-1256", $family);
135223

Unique
سه شنبه 24 شهریور 1394, 00:27 صبح
حالا جدا از این بحث که تا کد کاملتری نگذارین نمیشه نظر داد ، برام خیلی عجیبه که یونیکد را به 1265 عربی تبدیل میکنید !؟ چرا !؟

rash44
سه شنبه 24 شهریور 1394, 07:08 صبح
برای ذخیره در sqlserver
با unf8 که در sql server ذخیره میکنم کارکترهای فارسی به صورت حروف ناخوانا در sql server نمایش داده میشه . به 1265 که تبدیل میکنم در Sql server کارکترهای فارسی درست نمایش داده میشه و در زمان فراخوانی از sql و نمایش در صفحات مجددا از 1265 به یونیکد تبدیل میکنم

Unique
سه شنبه 24 شهریور 1394, 23:14 عصر
با unf8 که در sql server ذخیره میکنم کارکترهای فارسی به صورت حروف ناخوانا در sql server نمایش داده میشه
نوع داده را nvarchar بگذار و در زمان insert اینجوری عمل کن :

insert into table(fld_name,fld_family) values(N'علی',N'دایی');

از encoding های غیر یونیکد کلا دوری کنید که فقط موجبات دردسر هستند و بس !

rash44
چهارشنبه 25 شهریور 1394, 06:57 صبح
نوع داده را nvarchar بگذار و در زمان insert اینجوری عمل کن :

insert into table(fld_name,fld_family) values(N'علی',N'دایی');

از encoding های غیر یونیکد کلا دوری کنید که فقط موجبات دردسر هستند و بس !

کارکتر N در PDO به چه صورت استفاده میشه ؟


$sql="INSERT INTO info (name,family) VALUES (:name,:family)";
$result=$pdo->prepare($sql);
$result->execute(array(
":name"=>$name,
":family"=>$family
));

Unique
جمعه 27 شهریور 1394, 22:01 عصر
با چه درایوری به MSSQL وصل میشی ؟ خیلی فرق میکنه. بد نیست این پست (http://www.geekfarsi.com/%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D9%88-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-mssql-%D8%AF%D8%B1-php/75) من را هم بخونی.
برای ذخیره فارسی باید نوع داده را nvarchar قرار بدین ، MSSQL از UTF-16LE برای nvarchar استفاده میکنه و وقتی data را ذخیره میکنید توی mssql چرت و پرت نشون میده اما اگه همون را با php و pdo بخونید و نمایش بدین درست انجام میشه. یا هر query بنویسین و از fieldname: به صورت پارامتری استفاده کنید درست انجام مبشه و برای مستقیم هم که گفتم باید N بگذارین قبلش.

تنها مشکلی که پیش میاد اینه که اگه کسی با database شما بخواد با غیر از php کار کنه به مشکل میخوره و باید خودش تبدیل را انجام بده.
من با تمام این مسخره بازی های MSSQL سر و کله زدم و کلا هیچ علاقه ای بهش ندارم. مایکروسافت عموما کاری به استاندارد ها نداره و این مشکلات پیش میاد. بهتره از mysql یا mariadb استفاده کنید.

موفق باشی

pejman_view
سه شنبه 31 شهریور 1394, 13:25 عصر
سلام
در زمان ذخیره اطلاعات در sql server از تابع iconv برای تمامی متغیرها استفاده می کنم . در اولین بار که برنامه اجرا میشه هیچ مشکلی وجود نداره و برای بار دوم به بعد یک خطا صادر میشه و تابع فوق عمل نمی کنه و به جای داده ها null قرار می گیره .

لطفا راهنمائی کنید



$name=$_POST['name'];
$name=iconv("UTF-8", "windows-1256", $name);
//
$family=$_POST['family'];
$family=iconv("UTF-8", "windows-1256", $family);
135223

سلام اخوی،

متاسفانه cp1256 کاراکتر "ی" فارسی را شامل نمی شه از اون ی های عربی که دو نقطه
IGNORE رو که اضافه کردم باعث نادیده گرفت illegal characters می شه. اما !! باعث مثلاً اگه نوشتن "حسینی" تو این حالت تبدیل می شه به "حسین" یه هک کوچیکی اضافه کردم این حداقل کارتو راه بندازه

[PHP]$path = str_ireplace('ی','ي',$name);
$path = iconv('UTF-8', "windows-1256//IGNORE", $name);