PDA

View Full Version : مشکل با فونت فارسی در اتصال به SQL server از طریق php



MohammadReza.OmidAllah
سه شنبه 07 آذر 1391, 15:43 عصر
سلام دوستان

من میخوام از یه سرور به یه پایگاه داده توی سرور دیگه وصل بشم و باهاش کار کنم (sql server) با دستور زیر این کارو کردم ولی فیلدایی که محتوای فارسی دارنو به صورت یه مربع مشکی که توش علامت ؟ هست نشون میده متا تگ utf8 این کارارم کردم ولی باز همین مشکل رو دارم .





<?php

$conn = mssql_connect( 'SERVER', 'sa','560');

if( $conn ) {
echo "Connection established.";
$dbn="SodoorFactor91";
mssql_select_db($dbn)or die("not etesal");
$search=mssql_query("SELECT * FROM Moshtari");
while($halghe=mssql_fetch_array($search)){

$name=($halghe["Name"]);

print("<br/>");
echo($name);

}

}else{

}
?>


اگه لطف کنید کمک کنید ممنون میشم البته شنیدم کتابخانه های PDO این مشکل رو ندارن ولی نتونستم استفاده کنم و php.ini رو تنظیم کنم

مهم نیست برام با این دسور باشه یا دستورای دیگه فقط باید از یه سرور به یه سرور دیگه وصل بشم به پایگاه داده ی sql server

پیشاپیش از کمکتون ممنونم

Keramatifar
سه شنبه 07 آذر 1391, 17:22 عصر
پیشنهاد می کنم از PDO (http://php.net/manual/en/book.pdo.php)استفاده کنید

MohammadReza.OmidAllah
سه شنبه 07 آذر 1391, 19:03 عصر
پیشنهاد می کنم از PDO (http://php.net/manual/en/book.pdo.php)استفاده کنید


ممنون جناب كرامتي با PDO هم متصل كه ميشم همون مشكل وجود داره فيلد هاي فارسيم به صورت زير چاپ ميشه

[Name] => ���� ���� ���� �����



شايد ايراد از پايگاه داده ام باشه ولي من نميدونم چطور بايد تنظيم كنم پايگاه داده رو براي اين كار اخه برنامه تحت ويندوزي كه داره با اين جداول كار ميكنم هيچ مشكل فارسي نويسي نداره

اين هم سورسي كه با كلاس pdo استفاده كردم








<?php
try {
$hostname = "SERVER"; //host
$dbname = "SodoorFactor91"; //db name
$username = "sa"; // username like 'sa'
$pw = "560"; // password for the user

$dbh = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$pw");
if($dbh){echo "ok";}
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
$stmt = $dbh->prepare("SELECT * FROM Moshtari");
$stmt->execute();
while ($row = $stmt->fetch()) {
print_r($row);
}
unset($dbh); unset($stmt);
?>

fcsooti
سه شنبه 07 آذر 1391, 20:19 عصر
شما از توابع زیر استفاده کنید٬ از اسم توابع مشخصه هر کدوم به چه کاری میاد

function persian_sql_to_php($str){
if(mb_detect_encoding($str) == 'UTF-8' AND mb_check_encoding($str, 'UTF-8')){
$str = utf8_decode($str);
}
$str = iconv('Windows-1256', 'UTF-8', $str);
return $str;
}

function persian_php_to_sql($str){
$str = iconv('UTF-8', 'Windows-1256', $str);
return $str;
}

MohammadReza.OmidAllah
سه شنبه 07 آذر 1391, 21:01 عصر
شما از توابع زیر استفاده کنید٬ از اسم توابع مشخصه هر کدوم به چه کاری میاد

function persian_sql_to_php($str){
if(mb_detect_encoding($str) == 'UTF-8' AND mb_check_encoding($str, 'UTF-8')){
$str = utf8_decode($str);
}
$str = iconv('Windows-1256', 'UTF-8', $str);
return $str;
}

function persian_php_to_sql($str){
$str = iconv('UTF-8', 'Windows-1256', $str);
return $str;
}


میشه لطف کنید بگین چطوری از توابع بالا استفاده کنم ؟ به $str چی باید پاس کنم ؟

fcsooti
سه شنبه 07 آذر 1391, 21:10 عصر
هر مقداری رو که می‌خواهید echo کنید از persian_sql_to_php رد کنید و هر چی رو که می‌خواهید به sql بفرستید از persian_php_to_sql رد کنید.
فرضا اینطوری

$row['name'] = persian_sql_to_php($row['name']);

mahsara
شنبه 31 فروردین 1392, 10:08 صبح
با سلام
ببخشید که دوباره تاپیک را بالا اوردم.
من هم از odbc استفاده کردم و وقتی کواری اجرا میکردم حروف فارسی به صورت علامت سوال (؟) بود اما این تابعی که دوستمون fcsooti زحمت کشیدند گذاشتند مشکل رو حل کرد اما فقط روی لوکال. البته دیتابیس روی هاسته ولی فایلم را با ومپ که باز میکنم حروف فارسی درسته ولی وقتی همین فایل را اپلود میکنم روی هاست حروف را علامت سوال نشان میدهد!
نمیدانم چه تفاوتی بین لوکال و هاست باعث این مشکل میشه!
ممنون میشم از راهنمایی دوستان

mahsara
یک شنبه 01 اردیبهشت 1392, 14:09 عصر
باسلام
مشکلم حل شد.
هاست ما روی سرور مجازی خودمون بود و locale سرور روی persian تنظیم نشده بود. به محض اینکه control panel -> regional and language -> administrative -> change system locale تنظیم شد تمام علامت سوال ها درست شد.
البته فکر میکنم با تابع setlocale هم میشد تنظیمش کرد، البته من نتونستم از این تابع جواب بگیرم.