درج نوشته فارسی در mysql با php

با سلام خدمت دوستان
من یک مشکلی در درج نوشته فارسی در MYSQL توسط PHP دارم.
فیلد مورد نظر در دیتابیس دارای collation زیر هست :
utf8_bin
و type فیلد مورد نظر text هست.

در PHP هم کد مورد نظر به شکل زیر برای DB فرستاده می‌شود :
INSERT INTO ".DB_PREFIX."chat
( gruppe , von, an, zeit, zeile, eingabe )
VALUES (".(int)$chat_group.", ".(int)$user_ID.", ".(int)$msg_to.", ".(int)time().",
'".xss($zeile)."','".xss($content)."')";

فیلد مورد نظر من «eingabe » هست که به صورت زیر کد براش نوشته شده :
'".xss($content)."'

لطفا من رو راهنمایی کنید. ممنون
 

ziXet

مدیر انجمن PHP/MYSQL
با سلام خدمت دوستان
من یک مشکلی در درج نوشته فارسی در mysql توسط php دارم.
فیلد مورد نظر در دیتابیس دارای collation زیر هست :
Utf8_bin
و type فیلد مورد نظر text هست.

در php هم کد مورد نظر به شکل زیر برای db فرستاده می‌شود :
Insert into ".db_prefix."chat
( gruppe , von, an, zeit, zeile, eingabe )
values (".(int)$chat_group.", ".(int)$user_id.", ".(int)$msg_to.", ".(int)time().",
'".xss($zeile)."','".xss($content)."')";

فیلد مورد نظر من «eingabe » هست که به صورت زیر کد براش نوشته شده :
'".xss($content)."'

لطفا من رو راهنمایی کنید. ممنون
لطفا کدها رو در تگ مخصوص قرار بدید
 
با سلام.
دوست عزیر شما که تذکر می دید، لطفاً راه حلش رو هم بگید. من نمی دونم چطوری باید کدها رو باید در تگ مخصوص بزارم.
ضمناً کسی نیست جواب این سئوال رو بدونه ؟

با تشکر
 

pasargad-ir

Active Member
منظورش اینه که کد ها رو اینجوری تو سایت قرار بده

منظورش تو سایت خودت نبود.

[LTR]
PHP:
Insert into ".db_prefix."chat
( gruppe , von, an, zeit, zeile, eingabe )
values (".(int)$chat_group.", ".(int)$user_id.", ".(int)$msg_to.", ".(int)time().",
'".xss($zeile)."','".xss($content)."')";
[/LTR]
 

pasargad-ir

Active Member
این روش رو 1 بار امتحان کن

به MySQL برو

Query های زیر رو ثبت کن.

[LTR]
PHP:
CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci;
[/LTR]

[LTR]
PHP:
CREATE TABLE `test` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
  `text` TEXT CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  PRIMARY KEY (`id`)
)
 CHARACTER SET utf8 COLLATE utf8_persian_ci;
[/LTR]

این فایل رو هم به نام index.php ذخیره کن و اجرا کن.

من رو سیستم خودم تست کردم و جواب می ده.

[LTR]
PHP:
<?php
$host="localhost";
$dbuser="root";
$dbpass="";
$dbname ="test";
// - Make LINK -----------------------------------------------------------------
$link = mysql_connect("$host", "$dbuser", "$dbpass")
  or die ("Could not connect to MySQL");
mysql_select_db ("$dbname")
  or die ("Could not select database");
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>TEXT :</title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<?php
if(isset($_POST['submit']))
{
 $text=trim($_POST['text']);
  $query="INSERT INTO `test` (`id`, `text`) VALUES ('', '$text')";
 if(mysql_db_query($dbname, $query, $link))
 {
  echo"Insert OK";
 }else{
  echo"Cannot Insert";
 }
}
?>
<form name="form_test" method="post" action="index.php">
    <p align="center">TEXT :</p>
    <p align="center">&nbsp;<textarea name="text" rows="7" cols="20"></textarea></p>
    <p align="center"><input type="submit" name="submit" value="save"></p>
</form>
<?php
$query_show="SELECT * FROM `test`";
$result_show = mysql_db_query ($dbname,$query_show,$link);
if(mysql_num_rows($result_show) != '0')
{
 while($row = mysql_fetch_array($result_show))
 {
  echo"$row[text]<br>";
 }
}
?>
</body>
</html>
[/LTR]
 
با سلام و تشکر از دوستانی که راهنمایی کردند.

مشکل من همچنان برقراره. من هم collation مربوط به table رو به utf8_persian_ci تغییر دادم و هم collation مربوط به field مورد نظرم رو. اما مشکل حل نشد. متون فارسی هم در دیتابیس و هم در بروزر هنگام نمایش به شکل زیر نمایش داده میشه:


%u0628%u0627%u0648%u0641%u0627

اگر ممکن هست بیشتر راهنمایی کنید. ممنون
 
آخرین ویرایش:

pasargad-ir

Active Member
ببین فایل هات رو رو یه سرور بزار امتحان کن

با چند تا سیستم امتحان کن.

شاید مشکل از pc شماست
 
سلام.
فایل ها روی سرور هست.

من asp کار می کنم. ما توی asp برای اینکه یک رشته به صورت فارسی در دیتابیس ذخیره بشه علاوه بر اینکه collation و همچنین type فیلد مورد نظر رو در دیتابیس بر اساس رشته فارسی تنظیم می کنیم (مثلاً type فیلد رو روی nvarchar تنظیم می کنیم) در کدهای asp نیز وقتی در دستور insert می خواهیم اون رشته رو ارسال کنیم ، قبل از مقدار فیلد مورد نظر از حرف n استفاده می کنیم.
مانند :
کد:
n'".xss($content)."'

حالا می خوام بدونم در mysql من collation دیتابیس ، table و فیلد مورد نظر رو روی utf8_persian_ci تنظیم کردم و charset صفحه php رو هم utf-8 قرار دادم، آیا هنگام نوشتن دستور insert ، روی رشته فارسی مورد نظرم نباید بلای خاصی بیارم. یعنی به همین صورتی که الان هست درسته ؟
کد:
Insert into ".db_prefix."chat
( gruppe , von, an, zeit, zeile, eingabe )
values (".(int)$chat_group.", ".(int)$user_id.", ".(int)$msg_to.", ".(int)time().",
'".xss($zeile)."','".xss($content)."')";

یکی از دوستان گفته رشته فارسی رو به شکل زیر بنویس :
کد:
'".$_POST['control_name']."'

این سه مدل چه فرقی با هم دارند ؟ آیا در فارسی کردن رشته تأثیر ندارند ؟
کد:
'$content'
'".$_POST['control_name']."'  
'".xss($content)."'

حل این مشکل برای من خیلی مهمه. لطفاً بیشتر کمک کنید. ممنون
 
آخرین ویرایش:

pasargad-ir

Active Member
اگه اشکالی نداره کل کد های ساخت بانکت و جداولت رو به همراه کد همین صفحه یا بزار تو فاروم یا واسم ایمل کن من رو سیستم خودم بررسی کنم.
 

iman_ebru

Active Member
بعد از mysql_connect و mysql_select_db از تابع زیر استفاده کن.

PHP:
mysql_query("SET NAMES utf8");

ایمان
 

pasargad-ir

Active Member
بعد از mysql_connect و mysql_select_db از تابع زیر استفاده کن.

PHP:
mysql_query("set names utf8");

ایمان


موضوع جالب شد.

من همیشه از چیزی شبیه به روش بالا که گفتم استفاده میکردم و برای کلمه ای مثل سلام در بانک "ø³ù„ø§ù…" ذخیره میشد. ولی برای خوندنش دوباره همون "سلام" رو نشون میداد.

حالا که از کد بالا استفاده کردم تو بانک اطلاعاتی "سلام " رو درست مینویسه اما در خروجی "؟؟؟" میزنه

؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
 

iman_ebru

Active Member
در نسخه های جدید MySQL زبانهای UTF-8 ساماندهی شدن!

عدم هماهنگی Encoding بانک اطلاعاتی و صفحاتی که اطلاعات رو ارسال و/یا چاپ می کنن باعث میشد که شما قبلا سلام رو در بانک بصورت ø³ù„ø§ù مشاهده می کردید. الان هم میتونید همون کار رو با دستکاری و تغییر انکودینگ یکی انجام بدید.

همیشه بهترین حالت برای بهینه بودن حجم بانک اطلاعاتی دو مورد زیر هست

1. استفاده از کدینگ utf-8 در فرم های ارسال اطلاعات

2. تنظیم کودینگ پیشفرض بانک به utf-8 persian



ایمان
 
با سلام.
ضمن تشکر از راهنمایی تون، چون من اصلاً PHP بلد نیستم :
این کد رو قبل از query مربوط به insert باید بنویسم ؟ یعنی قبل از اینکه کد insert رو بنویسم توی یک query مجزا باید بنویسم :
کد:
mysql_query("SET NAMES utf8");  

یا 

mysql_query("SET NAMES 'utf8'");

ممنون از راهنمایی تون. اگه امکان داره و زحمتی نیست، این کد رو خودتون توی کد مورد نظر من درج کنید تا دیگه مزاحم نشم. ممنون
 

amirepsilon

Active Member
سلام
دوستان برای ما که فارسی مینویسیم
utf8_persian_ci
بهتره ؟
یا این : utf8
 

pasargad-ir

Active Member
در نسخه های جدید MySQL زبانهای UTF-8 ساماندهی شدن!

عدم هماهنگی Encoding بانک اطلاعاتی و صفحاتی که اطلاعات رو ارسال و/یا چاپ می کنن باعث میشد که شما قبلا سلام رو در بانک بصورت ø³ù„ø§ù مشاهده می کردید. الان هم میتونید همون کار رو با دستکاری و تغییر انکودینگ یکی انجام بدید.

همیشه بهترین حالت برای بهینه بودن حجم بانک اطلاعاتی دو مورد زیر هست

1. استفاده از کدینگ utf-8 در فرم های ارسال اطلاعات

2. تنظیم کودینگ پیشفرض بانک به utf-8 persian



ایمان

مرسی

به فرض من اومدم و از تبدیل کننده UTF-8 قبل از Query استفاده کردم . در بانک به درستی ذخیره شد.

حالا برای خروجی چه کار کنم که درست نشون بده ؟؟؟

لطفا راهنمایی کنید.
 
با سلام.
دوستان بی زحمت یکی هم جواب ما رو بده ......
کارم خیلی گیر افتاده.

با تشکر مجدد
 
سلام دوستان.
من این کد شما رو به صورت زیر استفاده می کنم جواب نمی ده :
کد:
mysql_query("SET NAMES 'UTF8'"); 
        $query = "INSERT INTO ".DB_PREFIX."chat
                           (gruppe,von,an,zeit,zeile,eingabe)
                           VALUES (".(int)$chat_group.", ".(int)$user_ID.", ".(int)$msg_to.", ".(int)time().",
                                         '".xss($zeile)."','".xss($content)."')";
        $result = db_query($query) or db_die();

اگر میشه بیشتر راهنمایی کنید. این کد set names utf8 رو دقیقاً کجا و چه شکلی باید بنویسم.

ممنون
 
آخرین ویرایش:

pasargad-ir

Active Member
من رو این کد امتحان کردم

جواب داد.

PHP:
mysql_query("SET NAMES utf8");
  $query="INSERT INTO `$tablepages` (`id`, `code`, `title`, `body`, `visit`) VALUES ('', '$code', '$title', '$body', '1')";
   if(mysql_db_query($dbname, $query, $link))
     {
 

imanmir

Member
با سلام

با سلام دوستان عزیز آیا کسی راه حلی برای این مشکل داره
من می خواهم حروف فارسی در دیتابیسم به صورت کد اسکی ذخیره بشه من توی مای اسکیول نوع دیتابیس و جداول را utf8-persian گذاشتم و حتی ascii هم امتحان کردم ولی جواب نداد به نظر من اگه مشکل بالا حل بشه مشکل دوست عزیزمون هم حله چون کد اسکی را در تمامی مرورگر ها با تمامی فرمت ها قابل خواندن می باشد لطفا ...
 

جدیدترین ارسال ها

بالا