PDA

View Full Version : سوال: نمایش اطلاعات به صورت علامت سوال



serius
شنبه 17 مهر 1395, 13:11 عصر
درود;

دوستان مدتیه با این مساله مشکل دارم ، کسی نیست متاسفانه بتون کمکم کنه .
روی هاست یه دیتابیس دارم ، یه جدول تستی ساختم داخلش ، 3 نوع داده تعریف کردم از نوع های text , varchar , nvarchar داخلشون مقادیر فارسی وارد کردم .
با این وب سرویس اطلاعات رو به صورت خروجی JSON نمایش میدم :


<?php
$server = 'localhost';


try {


$dbh = new PDO('odbc:Driver={SQL Server};Server=87.107.124.37\MSSQLSERVER2012;Datab ase=DB_Test;Client_CSet=UTF-8;Server_CSet=Windows-1251;Uid=Mahoo;Pwd=Mahoo-70');
ini_set('mssql.charset', 'UTF-8');
$response["allperson"] = array();


/*** QUERY ****/
$sql = "SELECT * FROM TB_Test";
$stmt=$dbh->query($sql);
$objs = $stmt->fetchAll(PDO::FETCH_OBJ);

foreach($objs as $object) {
$person = array();
$person["id"]=$object->id;
$person["a"]=$object->a;
$person["b"]=$object->b;
$person["c"]=$object->c;

array_push($response["allperson"], $person);
}
echo json_encode($response);

/*** close connection ***/
$dbh=null;
}catch(PDOException $e) {
echo $e->getMessage();
}
?>


دیتابیس MSSQL هست .
مقادیر فارسی رو به شکل علامت سوال بر میگردونه . ( اطلاعات رو قبلا تست کردم که موقع Insert کردن قبلشون یه کاراکتر N گذاشتم ) این اطلاعاتی که الان برام فارسی بر نمیگردونه رو داخل دیتابیس دستی وارد کردم . تو خود Sql Server Management Studio 2012 اطلاعات رو فارسی نشون میده . داخل پنل کاربری MyLittleAdmin هم فارسی نمایش میده . فقط زمانی که با وب سرویس خروجی JSON میگیرم فارسی بر نمیگردونه .

ashanet
شنبه 17 مهر 1395, 13:50 عصر
با سلام
Collation را در موقع ساخت دیتابیس چه چیزی انتحاب کرده اید؟ باید utf-8 bin بگذارید
و همچنین قبل از ذخیره query خودتون کامند کوئری utf8 رو هم بزنید
صفحه ای که می خواید اطلاعات رو هم خروجی بدید هم باید در صورتی که html هست داخل head یه متای charset بگذارید با مقدار utf-8

serius
شنبه 17 مهر 1395, 14:14 عصر
با سلام
Collation را در موقع ساخت دیتابیس چه چیزی انتحاب کرده اید؟ باید utf-8 bin بگذارید
و همچنین قبل از ذخیره query خودتون کامند کوئری utf8 رو هم بزنید
صفحه ای که می خواید اطلاعات رو هم خروجی بدید هم باید در صورتی که html هست داخل head یه متای charset بگذارید با مقدار utf-8

Collation روی Persian_CI_AI هست . قبل از ذخیره query کامند utf8 که گفتین متوجه نشدم ، موقعی که میخوام اطلاعات رو Insert کنم منظورتونه ؟ ( فعلا که اطلاعات رو تو خود Management Studio وارد کردم اینطوری نشون میده هنوز به کد نویسی Insert نرسیدم که اونجا این رو رعایت کنم . )

صفحه ای که html هست : من یه نود پد با Nodpad++ باز کردم زبان رو روی PHP گذاشتم و Encoding رو utf8 تنظیم کردم بعد وب سرویس رو نوشتم و ذخیره کردم و آپلود کردم روی هاست . صفحه ی html که شما میگی کجای کار من میشه ؟

**( کار من برنامه نویسی اندروید هست با بعضی مواقع C# ، اطلاعاتم در مورد بعضی چیز ها کمه . وب سرویس ها رو هم انقدر گشتم تا پیدا کردم ، با توجه به نیازم ویرایششون میکنم . )

serius
شنبه 17 مهر 1395, 14:17 عصر
الان یه تست گرفتم ، یه Echo "سلام"; زدم مقدار رو فارسی تو صفحه چاپ کرد . اما مقادیری که از دیتابیس میگیره علامت سوال چاپ میشه

پیام حیاتی
شنبه 17 مهر 1395, 16:28 عصر
http://php.net/manual/en/function.mysql-set-charset.php

serius
شنبه 17 مهر 1395, 16:47 عصر
http://php.net/manual/en/function.mysql-set-charset.php

دیتابیس MSSQL هست

ashanet
یک شنبه 18 مهر 1395, 12:11 عصر
منظور بنده اینه که شما موقع ثبت با استفاده از insert می تونید با روش استاندارد اقدام به ثبت کنید. زمانی که شما دستی وارد می کنید ممکنه این حالت اتفاق بیوفته
اما این کد رو در صفحه html خودتون قرار بدید
در قسمت head
<meta charset="utf-8" >
و این کد رو در صفحه php خودتون قرار بدید
header('Content-Type: text/html; charset=utf-8');
و برای ثبت هم
mysql_query("SET NAMES utf8");
و نتیجه را گزارش دهید

serius
یک شنبه 18 مهر 1395, 16:28 عصر
نه نمیشه

mysql_query("SET NAMES utf8"); که شما گفتین برای MySQL هست دیتابیس من MSSQL هست که تمام مشکلات هم زیر سر MSSQL بودنش هست .
در کل ، تمام راه هایی که تو اینترنت جست جو کردم تمام مطالب مرتبت با این موضوع تو وب سایت های Stack Overflow و php.net یا w3school رو چک کردم و انجام دادم .
یه جایی یه مطلبی بود که PHP با نسخه دیتابیس MSSQL هماهنگ نیست و نمیتونه مقادیر Unicode و یا فارسی رو برگشت بده .

با دیتابیس MySQL این مشکل رو ندارم و ناچار تمام دیتابیسم رو دارم میبرم به MySQL . ولی اگر کسی پیدا شد روی این موضوع تحقیق کنه و بیشتر از یک هفته وقتی که من کامل گذاشتم روی این موضوع و بتونه جواب رو پیدا کنه . فکر کنم مشکل خیلی از MSSQL کار ها رو که با PHP میخوان کار کنن رو حل کنه .

در کل ممنون از پاسخ گوییتون . و نتیجه اینه که تا الان هنوز هیچ کس نتونسته این مشکل رو حل کنه . اونقدر تحقیق کردم که مطمعن بگم راه حل نداره هنوز .

ashanet
یک شنبه 18 مهر 1395, 22:02 عصر
الان براتون یه سرچی میزنم تا چند مین دیگه بهتون اطلاع میدم

ashanet
یک شنبه 18 مهر 1395, 22:09 عصر
کد های زیادی برای این کار هست اینجا نمونه ای از دریافت و نشان دادن اطلاعات هست


$query = $this->db->query($sql);
$result = $query->fetchAll(PDO::FETCH_OBJ);
foreach ($result as $row) {
foreach (get_object_vars($row) as $key => $value) {
$row->$key = (mb_detect_encoding($value, mb_detect_order(), true) === 'UTF-8')
? $value : iconv('iso-8859-1', 'utf-8', $value);
}
$results[] = $row;
}

این راه رو هم تست کنید ببینید نتیجه میده یا نه
https://www.mssqltips.com/sqlservertip/3119/import-utf8-unicode-special-characters-with-sql-server-integration-services/