PDA

View Full Version : سوال: مشکل بهم ریختن فونت در هاست واقعی



pirmard66
شنبه 12 اسفند 1391, 22:48 عصر
سلام اساتید محترم...

من یه سایت اوکی کردم و فرستادم رو هاست...

الان مشکل اینجاست که موارد دریافتی از دیتابیس بد نمایش داده میشن...

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

اساتید راهنمایی کنن

آدرس وب برای دیدن بهم ریختن فونت ها:

MMSHFE
شنبه 12 اسفند 1391, 22:57 عصر
دیتابیس رو که روی هاست میساختین، Collation رو utf8_bin یا utf8_persian_ci انتخاب کردین یا نه؟ لطفاً به Collation جداول و فیلدها دقت کنید. همچنین حتماً چک کنید بعد از انتخاب دیتابیس، کوئری 'SET NAMES 'utf8 اجرا شده باشه.

pirmard66
شنبه 12 اسفند 1391, 23:02 عصر
ﺑﺎ ﺗﺸﻜﺮ...
ﺑﻠﻪ ﺗﻮﺟﻪ ﻛﺮﺩﻡ ﺑﻪ ﺍﻳﻦ ﻣﻮﺭﺩ ﻭﻟﻲ ﻫﻤﻪ ﭼﻴﺰ ﺍﻭﻛﻲ ﻫﺴﺖ،ﻣﻴﺸﻪ ﻣﺸﻜﻞ ﺍﺯ css ﻭ ﺍﺩﺭﺳﺶ ﺑﺎﺷﻪ؟

pirmard66
شنبه 12 اسفند 1391, 23:12 عصر
نه....آدرس css هم درسته!!!

اساتید کمک...

MMSHFE
شنبه 12 اسفند 1391, 23:13 عصر
کدتون رو بگذارین. ضمناً چک کنید فایلهای روی هاست حتماً با کدگذاری UTF-8 without BOM ذخیره شده باشن. بعضی وقتها موقع انتقال فایل، کدگذاری عوض میشه. بخصوص اگه با برنامه های FTP Client کار کنید (برام چند بار پیش اومده)

pirmard66
شنبه 12 اسفند 1391, 23:16 عصر
نه ..مستقیم اپلود کردم...یعنی کل سایت رو زیپ کردم..

راستی وقتی از مدیریت یک مجموعه درست میکنم ( از مدیریت ) که مربوط به منو بالاست اصلا هیچی وارد نمیشه..خالی وارد میشه؟؟؟؟

MMSHFE
شنبه 12 اسفند 1391, 23:19 عصر
اگه امکان داره، لینک هاست و اطلاعات کنترل پانل رو بفرستین تا مشکل رو بررسی کنم. اگه چیزی ثبت نمیشه هم mysql_error رو چاپ کنید ببینید مشکل کجاست.

pirmard66
شنبه 12 اسفند 1391, 23:22 عصر
ﺍﻻﻥ ﺑﺮﺍﺗﻮﻥ ~ﻳﺎﻡ ﺧﺼﻮﺻﻲ ﻣﻴﻜﻨﻢ،ﺑﺎ ﺗﺸﻜﺮ

MMSHFE
شنبه 12 اسفند 1391, 23:53 عصر
توی دیتابیس (جدول group_section) اطلاعات بهم ریخته ذخیره شده. احتمالاً موقع import کردن روی هاست یا export کردن از روی localhost کدگذاری درست انتخاب نشده. این جدول رو درست کنید، مشکل رفع میشه.

pirmard66
یک شنبه 13 اسفند 1391, 00:17 صبح
همه رو حذف کردم...ولی جدید که وارد میکنم خالی نمایش میده!!!!

pirmard66
یک شنبه 13 اسفند 1391, 00:43 صبح
مشکل از تابع mysql_real_scap_string بود... حذفش کردم درست شد... چرا؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

MMSHFE
یک شنبه 13 اسفند 1391, 07:50 صبح
نه حذف نکنید. قبلش این دستور رو اجرا کنید:


mysql_set_charset('utf8');

دلیلش اینه که اجرای کوئری 'SET NAMES 'utf8 فقط کدگذاری اطلاعات مبادله شده بین PHP و MySQL رو تنظیم میکنه و کدگذاری مورد استفاده توی escape با دستور بالا تنظیم میشه و اگه نگذارینش حروف فارسی رو چون یونیکد هستن و توی جدول حروف لاتین (کدگذاری پیشفرض) نیستن، بعنوان کد مخرب میشناسه و حذف میکنه.

pirmard66
یک شنبه 13 اسفند 1391, 13:10 عصر
با تشکر...

این دستور رو فقط یک بار در صفحه بزارم یا قبل هر mysql_real_scap_string اینو بزارم؟؟؟

pirmard66
یک شنبه 13 اسفند 1391, 14:10 عصر
نه حذف نکنید. قبلش این دستور رو اجرا کنید:


mysql_set_charset('utf8');

دلیلش اینه که اجرای کوئری 'SET NAMES 'utf8 فقط کدگذاری اطلاعات مبادله شده بین PHP و MySQL رو تنظیم میکنه و کدگذاری مورد استفاده توی escape با دستور بالا تنظیم میشه و اگه نگذارینش حروف فارسی رو چون یونیکد هستن و توی جدول حروف لاتین (کدگذاری پیشفرض) نیستن، بعنوان کد مخرب میشناسه و حذف میکنه.

میشه نحوه صحیح این کد در کنار mysql_real_scap_string

توضیح بدین؟؟؟؟

با تشکر..
من دوسه مدل تست کردم جواب نداد

pirmard66
یک شنبه 13 اسفند 1391, 17:43 عصر
دوستان کسی راهنمایی نمیکنه؟:افسرده:

MMSHFE
یک شنبه 13 اسفند 1391, 18:28 عصر
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');

موقع اتصال به دیتابیس به این شکل عمل کنید. دیگه توی بقیه اسکریپت لازم نیست هربار mysql_set_charset رو صدا بزنید. دقت کنید که هربار به MySQL وصل شدین و دیتابیس رو انتخاب کردین، کوئری 'SET NAMES 'utf8 رو باید بفرستین تا اجرا بشه و mysql_set_charset رو هم صدا بزنید. تأکید میکنم فقط موقع اتصال نه اینکه هربار بخواین یک کوئری اجرا کنید، این تابع رو صدا بزنید. درواقع با یکبار اجرا، تا پایان اسکریپت اعتبار داره.

pirmard66
یک شنبه 13 اسفند 1391, 18:47 عصر
با تشکر..

پس به ورودی ها کاری نداشته باشم؟؟

یعنی اونجایی که mysql_real_scap_string رو به ورودی میدم!؟؟؟؟؟

MMSHFE
یک شنبه 13 اسفند 1391, 18:50 عصر
نه قبلش باید به دیتابیس وصل شده باشین (mysql_real_escape_string بدون وجود یک اتصال باز به MySQL کار نمیکنه). همون موقع اتصال دستوری که گفتم رو بنویسید. دیگه موقع escape کردن ورودیها نمیخواد کاری بکنید و mysql_real_escape_string درست کار خواهد کرد.

pirmard66
یک شنبه 13 اسفند 1391, 18:57 عصر
ببخشید...

متوجه نمیشم..

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

من اونجا که کد رو میگیرم mysql_real_escape_string کنم کد رو و بعد بفرستم داخل کلاس و اونجا set name utf8 کنم؟ یعنی بعد از mysql_escape_string ؟؟؟

ببخشید زیاد سوال میکنم!

MMSHFE
یک شنبه 13 اسفند 1391, 19:04 عصر
نه به این مثال دقت کنید:


<?php
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
mysql_set_charset('utf8');

if(isset($_POST['name'], $_POST['family'])) {
$name = mysql_real_escape_string($_POST['name']);
$family = mysql_real_escape_string($_POST['family']);
mysql_query("INSERT INTO `students` (`name`,`family`) VALUES ('{$name}','{$family}')");
mysql_close();
}
?>

pirmard66
یک شنبه 13 اسفند 1391, 19:25 عصر
با تشکر فراوان و سپاسگذاری از شما MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE)

مشکل حل شد!