برگزیده های پرشین تولز

محتویات یک صفحه بعد از ذخیره در متغیر دیگه یونیکد نیست !!؟

mehrzad22

Registered User
تاریخ عضویت
8 نوامبر 2007
نوشته‌ها
687
لایک‌ها
95
من برای باز کردن غیر مستقیم یک صفحه از روی وب اون میخوام بیارم روی هاست خودم و نمایش بدم. با این تابع محتویات یک صفحه را میخونم
PHP:
function get_web_content($website_address) {
 if (!($file_handle= fopen($website_address, "r"))) {
}
 while ($line=fgets($file_handle,1000))
 {
 $site_content.=$line;
 }
 fclose ($file_handle);
 return $site_content;
 }

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

دلیلش چیست آیا اون سایت تشخیص میده که من با مرروگر میام و کد بندیش را عوض میکنه یا اینکه من نکته ای را رعایت نمی کنم ؟
 

Shahed

کاربر قدیمی پرشین تولز
تاریخ عضویت
30 ژوئن 2003
نوشته‌ها
7,270
لایک‌ها
34
محل سکونت
mt.cgi
من برای باز کردن غیر مستقیم یک صفحه از روی وب اون میخوام بیارم روی هاست خودم و نمایش بدم. با این تابع محتویات یک صفحه را میخونم
PHP:
function get_web_content($website_address) {
 if (!($file_handle= fopen($website_address, "r"))) {
}
 while ($line=fgets($file_handle,1000))
 {
 $site_content.=$line;
 }
 fclose ($file_handle);
 return $site_content;
 }

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

دلیلش چیست آیا اون سایت تشخیص میده که من با مرروگر میام و کد بندیش را عوض میکنه یا اینکه من نکته ای را رعایت نمی کنم ؟
خود این فایل رو با فرمت یونیکد سیو کردی؟؟
 

mehrzad22

Registered User
تاریخ عضویت
8 نوامبر 2007
نوشته‌ها
687
لایک‌ها
95
خود این فایل رو با فرمت یونیکد سیو کردی؟؟
مشکل من توی سیو کردن نیست . این صفحه یک صفحه وب هست وقتی که با مرورگر بازش می کنم charset اون utf-8 هست خود به خود . ولی وقتی از طریق هاست بازش میکنم مثلن میریزم توی یک متغیر میبینم charset دیگه یونیکد نیست و iso-8859-1 هست و به همین خاطر کارکتر های فارسی از بین رفتن .
اون سایت احتمالن میفهمه من با مرورگر بازش کردم و یا پیش فرض برا مرورگرش یونیکد هست ولی وقتی از طریق هاست بازش می کنم دیکه صفحه را یونیکد تحویلم نمیده !
حالا من چه طور باید خودم را جای مرورگر جا بزنم تا صفحه یونیکد به دستم برسه یا اصلن چرا وقتی از طرق هاست صفحه را باز می کنم با من به عنوان iso-8859-1 برخورد میکنه ؟
 

Shahed

کاربر قدیمی پرشین تولز
تاریخ عضویت
30 ژوئن 2003
نوشته‌ها
7,270
لایک‌ها
34
محل سکونت
mt.cgi
مشکل من توی سیو کردن نیست . این صفحه یک صفحه وب هست وقتی که با مرورگر بازش می کنم charset اون utf-8 هست خود به خود . ولی وقتی از طریق هاست بازش میکنم مثلن میریزم توی یک متغیر میبینم charset دیگه یونیکد نیست و iso-8859-1 هست و به همین خاطر کارکتر های فارسی از بین رفتن .
اون سایت احتمالن میفهمه من با مرورگر بازش کردم و یا پیش فرض برا مرورگرش یونیکد هست ولی وقتی از طریق هاست بازش می کنم دیکه صفحه را یونیکد تحویلم نمیده !
حالا من چه طور باید خودم را جای مرورگر جا بزنم تا صفحه یونیکد به دستم برسه یا اصلن چرا وقتی از طرق هاست صفحه را باز می کنم با من به عنوان iso-8859-1 برخورد میکنه ؟
مثلن میریزم توی یک متغیر میبینم charset دیگه یونیکد نیست
همینجایی که متغیر رو توش echo میکنی باید انکدینگش uft-8 باشه ها ! انکدینگ چیزی نیست که از طریق منغیر منتقل بشه !
 

weblizard

کاربر تازه وارد
تاریخ عضویت
17 نوامبر 2007
نوشته‌ها
6
لایک‌ها
0
اگه سایت مذكور چند زبانه باشه این مشكل پیش میاد چون در این گونه موارد معمولا زبان كاربر را یا از طریق كوكی و یا از طریق زبان default مرورگر تشخیص میدهند كه در مورد code شما هیچكدام صادق نیست بنابراین صفحه مورد نظر با انكدینگ default ارسال می شود.

اگه ممكنه آدرس صفحه رو بده ....
 

Shahed

کاربر قدیمی پرشین تولز
تاریخ عضویت
30 ژوئن 2003
نوشته‌ها
7,270
لایک‌ها
34
محل سکونت
mt.cgi
اگه سایت مذكور چند زبانه باشه این مشكل پیش میاد چون در این گونه موارد معمولا زبان كاربر را یا از طریق كوكی و یا از طریق زبان default مرورگر تشخیص میدهند كه در مورد code شما هیچكدام صادق نیست بنابراین صفحه مورد نظر با انكدینگ default ارسال می شود.

اگه ممكنه آدرس صفحه رو بده ....
مگه میشه جنس انکدینگ محتوای یه دیتابیس رو (مثلا!!) به همین راحتی عوض کرد آخه مگه برادر؟
 

weblizard

کاربر تازه وارد
تاریخ عضویت
17 نوامبر 2007
نوشته‌ها
6
لایک‌ها
0
ایشون صحبتی از دیتابیس نكردند !!!
البته در مورد سیستم های چند زبانی شما میتونید برای هر زبان یك تیبیل داشته باشید با انكدینگ خاص خودش
و پس از تشخیص نوع زبان كاربر از تیبل مربوط بخودش اطلاعات رو ارسال كنید ، این چیز عجیبیه ؟؟؟
 

Shahed

کاربر قدیمی پرشین تولز
تاریخ عضویت
30 ژوئن 2003
نوشته‌ها
7,270
لایک‌ها
34
محل سکونت
mt.cgi
ایشون صحبتی از دیتابیس نكردند !!!
البته در مورد سیستم های چند زبانی شما میتونید برای هر زبان یك تیبیل داشته باشید با انكدینگ خاص خودش
و پس از تشخیص نوع زبان كاربر از تیبل مربوط بخودش اطلاعات رو ارسال كنید ، این چیز عجیبیه ؟؟؟
خواستم تاپیک رو منحرف کنم تابلو شد :D

/

خوب خودت گفتی با توجه به زبان انکدینگ صفحه رو عوض میکنن و از اونجایی که محتوای سایت بالاخره باید از توی دیتابیس بیاد بیرون (حالا از هر جا که میخواد بیاد) باید جنس انکدینگ اون متن هم عوض بشه دیگه !!
 

peiman

Registered User
تاریخ عضویت
23 فوریه 2003
نوشته‌ها
1,554
لایک‌ها
21
سن
36
از تو head صفحه میشه انکدینگ رو پیدا کرد!!
نمیشه!؟ یه فیلد هم بزار که انکدینگ رو توش بنویسی!!
بعد صفحه ذخیره شده رو با اون انکدینگ که سیو کردی نشون بده!!
 

Shahed

کاربر قدیمی پرشین تولز
تاریخ عضویت
30 ژوئن 2003
نوشته‌ها
7,270
لایک‌ها
34
محل سکونت
mt.cgi
از تو head صفحه میشه انکدینگ رو پیدا کرد!!
نمیشه!؟ یه فیلد هم بزار که انکدینگ رو توش بنویسی!!
بعد صفحه ذخیره شده رو با اون انکدینگ که سیو کردی نشون بده!!
میشه !! حالا بیا انکدینگ صفحه رو هم عوض کن !! خوب که چی؟؟ بالاخره باید جنس انکدینگ مثلا پستهای تو صفحه هم عوض شه یا نه؟؟
 

weblizard

کاربر تازه وارد
تاریخ عضویت
17 نوامبر 2007
نوشته‌ها
6
لایک‌ها
0
نه دوستان حتما لازم نیست توی هد فایل (meta tag) اون رو بنویسند ، سرویس دهنده میتونه اون رو همراه هدر اولیه برای مرورگر ارسال كنه بدون این كه توی html چیزی بزاره
در مورد محتوای سایت و دیتابیس هم كه حتما همه محتوا توی دیتابیس نیست ... هست ؟
تا حالا به CMS هایی بر خورد نكردین كه برای فارسی سازی كافیه مثلا یه فایل farsi.php درست كنید و اون رو توی دایركتوری language بزارین;)

البته منم با انحراف موافقم :lol:
 

peiman

Registered User
تاریخ عضویت
23 فوریه 2003
نوشته‌ها
1,554
لایک‌ها
21
سن
36
نصفه شبی کل کل نکن!!
برو یه تیبل با دوتا فیلد بساز!!
یکی بادی و یکی تایپ
تو بادی متن صفحه رو اسکی سیو کن و تو تایپ انکدینگ خروجی!!
بعد موقع اکسپورت انکدینگ صفحه رو با php بزار همونی که بوده!!
 

weblizard

کاربر تازه وارد
تاریخ عضویت
17 نوامبر 2007
نوشته‌ها
6
لایک‌ها
0
جالبه mehrzad22 صداش در نمیاد !!! ؟
دوست عزیز اگه یه لطف كنی و آدرس سایت رو بدی همه چیز حل میشه .....
 

neo2

Registered User
تاریخ عضویت
8 آپریل 2005
نوشته‌ها
1,667
لایک‌ها
184
محل سکونت
/cat/etc/passwd/
اسکی کردن راه خوبی هست. البته encoding رو هم utf-8 بذاری ضرری نداره ..
 

mehrzad22

Registered User
تاریخ عضویت
8 نوامبر 2007
نوشته‌ها
687
لایک‌ها
95
اگه سایت مذكور چند زبانه باشه این مشكل پیش میاد چون در این گونه موارد معمولا زبان كاربر را یا از طریق كوكی و یا از طریق زبان default مرورگر تشخیص میدهند كه در مورد code شما هیچكدام صادق نیست بنابراین صفحه مورد نظر با انكدینگ default ارسال می شود.

با چه دستوری میشه فهمید زبان و انکدینگ پیش فزض مرورگر چی هست و چطور میشه زبان پیش فرض مرورگر را تغییر داد ؟
حال که من دارم بدون مرورگر به صفحه دسترسی پیدا می کنم چجور انکدینگ پیش فرضم را یونیکد نشون بدم که با من مثل مرور گر های یونیکد رفتار کنه؟
 

mehrzad22

Registered User
تاریخ عضویت
8 نوامبر 2007
نوشته‌ها
687
لایک‌ها
95
دوستان اگه راه دیگه ای برا ذخیره کردن محتویات یک صفحه دارید که ممکنه مشکل من را برطرف کنه لطفن راهنماییم کنید
 

bishtar

کاربر تازه وارد
تاریخ عضویت
3 ژوئن 2007
نوشته‌ها
214
لایک‌ها
5
محل سکونت
هرکجا بغیر از اینجا
اگه سرورت آپاچی هست کد زیرو تو فایل .htaccess بریز :
AddDefaultCharset utf-8

واسه من رو لوکال جواب داد.
(التماس دعا)
 

mehrzad22

Registered User
تاریخ عضویت
8 نوامبر 2007
نوشته‌ها
687
لایک‌ها
95
اگه سرورت آپاچی هست کد زیرو تو فایل .htaccess بریز :
AddDefaultCharset utf-8

واسه من رو لوکال جواب داد.
(التماس دعا)
متاسفانه دسترسی ندارم به .htaccess

خودم بالاخره مشکلم را حل کردم :)

با استفاده از curl این هدر را فرستادم :

$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Pragma: "; // browsers keep this blank.

بعد هم با curl خوندمش که همچی حل شد
ممنونم از دوستان که راهنمایی کردند . بازم اگه راهم مشکل ایجاد میکنه یا را بهتری سراغ دارید بفرمایید
 
بالا