PDA

View Full Version : استخراج مطالب از پایگاه داده



jalaladdin
چهارشنبه 02 شهریور 1390, 05:16 صبح
وقتی مطالب فارسی در پایگاه داده ذخیره میکنم و بااستفاده از دستورات PHP&MYSQL مطالب را بیرون میکشم تمامی متن بهم ریخته هست به نظر شما مشکل از کجاست

jalaladdin
چهارشنبه 02 شهریور 1390, 05:26 صبح
اگر مقدار متغیرها بدین صورت بنویسم

$n = htmlentities($_POST['name']);
$e=htmlentities($_POST['email']);
$me=htmlentities($_POST['comment']); یعنی اگر htmlentities اضافه کنم فونت مطالبی که از پایگاه داده بیرون میکشم بهم ریخته است ولی اگربدین صورت بنویسم تمام مطالب فارسی نشان داده میشود

$n = $_POST['name'];
$e=$_POST['email'];
$me=$_POST['comment'];

amin1softco
چهارشنبه 02 شهریور 1390, 09:52 صبح
وقتی پایگاه رو تعریف می کنی از نوع utf8_general استفاده کن


<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>




mysql_query("SET NAMES utf8");
mysql_set_charset("utf8");

jalaladdin
پنج شنبه 03 شهریور 1390, 18:00 عصر
با توجه به گفته شما باز هم مطالب فارسی که از پایگاه داده استخراج میکنم بهم ریخته میباشد
بدین صورت میباشد
´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´ Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø ´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´Ø´ ششششششششششØ

mamali-mohammad
پنج شنبه 03 شهریور 1390, 18:03 عصر
از این استفاده کنیم فونت ها رو خراب می کنه :

$me=htmlentities($_POST['comment']);
راه حل دقیقش چیه ؟

jalaladdin
پنج شنبه 03 شهریور 1390, 18:14 عصر
اگراین کد رو قبل از query مربوط به insert بنویسم مطالب بصورت فارسی در پایگاه داده ذخیره میشوند اما در صفحه اصلی وب سایت مطالب بصورت علامت سوال نشان داده میشود

mysql_query("SET NAMES utf8");

amin1softco
پنج شنبه 03 شهریور 1390, 18:16 عصر
اینو امتحان کن ببین حل می شه؟


$me=htmlentities($_POST['comment'], null, 'utf-8');

jalaladdin
جمعه 04 شهریور 1390, 11:40 صبح
تا اینجا درست شد اما مطالبی که در پایگاه ذخیره میشوند بدین صورت میباشد
مقاله رو حدود 1 سال پیش برای ...

mamali-mohammad
جمعه 04 شهریور 1390, 13:33 عصر
اقا من با ذخیرش مشکل ندارم
اینکارو انجام دادم :

$text=htmlentities($_POST['text'], null, 'utf-8');
$text=mysql_real_escape_string($text);
این متنو در ادیتور مینویسم و ذخیره می کنیم

hello
how are u ?
اما زمان نمایش اینطوری نمایش میده :

hello<br>how are u ?<br>

چه کنیم؟

blackmak
جمعه 04 شهریور 1390, 13:41 عصر
وقتی پایگاه رو تعریف می کنی از نوع utf8_general استفاده کن
table باید utf8_general باشه
ستون ها توی table هم باید utf8_general باشه


$link = mysql_connect("localhost","root","") or die ("Connect:E-1");
mysql_query("SET NAMES 'utf8'", $link);



<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

موارد فوق کافیه ، همرو دوستان گفتن اگه شما رعایت کنی مطمئن باش جواب میگیری

mamali-mohammad
جمعه 04 شهریور 1390, 16:31 عصر
من مشکلی با نحوه ذخیره زبان فارسی ندارم
من نمی دونم چرا خروجی رو به این صورت میده :

hello<br>how <span style="font-weight: bold;">are </span>u ?<br>سلام<br>اوکی<br>
در صورتی که باید اینطوری باشه :

hello
how are u ?
سلام
اوکی

amin1softco
جمعه 04 شهریور 1390, 17:11 عصر
خوب عزیزه من تابع htmlentities کارش همینه دیگه وقتی از پایگاه در اومد برای نمایشش از این تابع استفاده کن



$text=htmlspecialchars_decode($text);

mamali-mohammad
جمعه 04 شهریور 1390, 18:13 عصر
قربونت برم
درست شد

پس با این حساب زمانی که به دیتابیس میفرستیم اینکارو کنیم :

$text=htmlentities($_POST['text'], null, 'utf-8');
$text=mysql_real_escape_string($text);

زمانی هم فراخوانی می کنیم اینکارو کنیم :

$text=$row["text"];
$text=htmlspecialchars_decode($text,ENT_QUOTES);

درسته ؟
اینطوری کامل از حملات XSS و Sql injection در امانیم
اره ؟

amin1softco
جمعه 04 شهریور 1390, 18:25 عصر
نه جانم باید جابه جا عمل کنی




$text=mysql_real_escape_string($text);$text=htmlen tities($_POST['text'], null, 'utf-8');
در ثانی بهتره از این ماژول هایی که معرفی شد مثل htmlpurifier یا htmlawed استفاده کنی در کل این سوال رو باید هکر ها جواب بدند............

mamali-mohammad
جمعه 04 شهریور 1390, 18:45 عصر
یعنی اول escape کنم و بعدش htm کنم
دمت گردم

jalaladdin
جمعه 04 شهریور 1390, 21:00 عصر
وقتی از این کوئری برای ذخیره مطلب در پایگاه داده استفاده میکنم

mysql_query("SET NAMES 'utf8'", $con);
مطالب بصورت فارسی در پایگاه ذخیره شده اما وقتی بیرون میکشم بصورت علامت سوال نشان داده میشود

mamali-mohammad
جمعه 04 شهریور 1390, 21:56 عصر
این کارو انجام نده
منم بدون اینکه utf8 کنم ذخیره می کنم کار میکنه