PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل در نوشته فارسی در زمان استفاده از CURL و یا file_get_contents



iroo
April 26th, 2017, 09:20
سلام و خسته نباشید خدمت تمامی دوستان عزیز

توسط دستورات CURL و یا file_get_contents محتویات یک پیج رو لود میکنم ولی نوشته های فارسی خراب نشون میده، البته لازم به توضیح برخی نوشته های فارسی رو درست نشون میده و برخی هاشون رو بصورت کاراکترهای نامعلوم
http://s9.picofile.com/file/8293158642/dliak.png

انکدینگ صفحه هم UTF-8 است.....

ممنون میشم راهنمائیم کنید :53:

با تشکر

AtrafNet
April 26th, 2017, 09:44
سلام
به فایل htaccess. این کد رو اضافه کنید:



AddDefaultCharset utf-8


با php هم قبل از echo کردن هرگونه خروجی این دستور رو بذارید بد نیست:



header('Content-type: text/html; charset=UTF-8');


دقت کنید اگه دستور بالا وقتی اجرا بشه که از قبل چیزی روی صفحه echo یا print شده باشه با اخطار headers already sent مواجه میشید.

اگر بازم درست نشد ممکنه مشکل از رشته خروجی curl باشه که می تونید به پارامتر های curl یه CURLOPT_ENCODING با مقدار خالی هم اضافه کنید تا اگه Encoding خاصی دریافت کرد قبول نکنه:



curl_setopt($ch, CURLOPT_ENCODING ,"");

iroo
April 26th, 2017, 09:51
سلام
به فایل htaccess. این کد رو اضافه کنید:



AddDefaultCharset utf-8


با php هم قبل از echo کردن هرگونه خروجی این دستور رو بذارید بد نیست:



header('Content-type: text/html; charset=UTF-8');


دقت کنید اگه دستور بالا وقتی اجرا بشه که از قبل چیزی روی صفحه echo یا print شده باشه با اخطار headers already sent مواجه میشید.

اگر بازم درست نشد ممکنه مشکل از رشته خروجی curl باشه که می تونید به پارامتر های curl یه CURLOPT_ENCODING با مقدار خالی هم اضافه کنید تا اگه Encoding خاصی دریافت کرد قبول نکنه:



curl_setopt($ch, CURLOPT_ENCODING ,"");



ممنون
نه متاسفانه درست نشد، هر سه اینا رو هم اضافه کردم، البته توجه کنید مثلا یه صفحه رو دریافت میکنم اگه 10 تا نوشته فارسی باشه 5 تا اینطوری قاطی پاتی میاره، 5 تای بقیه رو سالم میاره

میخواهید رمز هاست بدم بررسی کنید؟

AtrafNet
April 26th, 2017, 10:00
ممنون
نه متاسفانه درست نشد، هر سه اینا رو هم اضافه کردم، البته توجه کنید مثلا یه صفحه رو دریافت میکنم اگه 10 تا نوشته فارسی باشه 5 تا اینطوری قاطی پاتی میاره، 5 تای بقیه رو سالم میاره

میخواهید رمز هاست بدم بررسی کنید؟

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

اما پیشنهاد میکنم اولاً در مرورگر های دیگه هم تست کنید دوماً یه افزونه Live HTTP Headers در فایرفاکس یا کروم نصب کنید و بررسی کنید ببینید header های صفحه شما رو چی میزنه و الخصوص گزینه Content-Type چیه.

اگه همه چی اوکی بود و اینطوریه شاید مشکل از صفحه مقصد هستش که انکدینگ هاش قاطی داره که می تونید با تعویض لینکی که به curl دادید با یه لینک فارسی دیگه ببینید درسته یا نه.

shahinmq
April 26th, 2017, 10:09
عرض سلام و احترام

کاری که فرمودند را انجام بدید (بررسی header ها) اگر به نتیجه نرسیدید فقط یکبار جهت تست با استفاده از notepad ++ ، انکدینگ را بر روی UTF8-BOM و UTF8 قرار بدید.

و سوال اینکه مقصدی که اطلاعات را از آن دریافت می کنید ، طبق گفته ی شما بعضی از متون را درست نشان می دهد و برخی دیگر را خیر ! اگر اطلاعات از دیتابیس خوانده می شود،نوع Collation دیتابیس هم بررسی کنید.

iroo
April 26th, 2017, 17:15
این آدرس رو توسط curl دریافت کنید، می بینید که محتوایات اون مشکل داره...
این آدرس یک نمونه تستی است و اصل قضیه این نیست

میشه تست کنید؟

AtrafNet
April 26th, 2017, 17:28
http://www.bing.com/search?q=%D8%B1%D8%AF%DB%8C%D8%A7%D8%A8+%D8%AE%D9% 88%D8%AF%D8%B1%D9%88&qs=n&form=QBLH&sp=-1&pq=%D8%B1%D8%AF%DB%8C%D8%A7%D8%A8+%D8%AE&sc=0-7&sk=&cvid=39FF7BBFBFD141A0BDCC155A8F6F6FD5

این آدرس رو توسط CURL دریافت کنید، می بینید که محتوایات اون مشکل داره...
این آدرس یک نمونه تستی است و اصل قضیه این نیست

میشه تست کنید؟

من کد ساده زیر رو با آدرسی که دادید در localhost و مرورگر فایرفاکس تست کردم مشکلی نبود:



<?php
$url = 'http://www.bing.com/search?q=%D8%B1%D8%AF%DB%8C%D8%A7%D8%A8+%D8%AE%D9% 88%D8%AF%D8%B1%D9%88&qs=n&form=QBLH&sp=-1&pq=%D8%B1%D8%AF%DB%8C%D8%A7%D8%A8+%D8%AE&sc=0-7&sk=&cvid=39FF7BBFBFD141A0BDCC155A8F6F6FD5';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$response = curl_exec($ch);
curl_close($ch);
header('Content-Type: text/html; charset=UTF-8');
echo $response;


شاید مشکل از تنظیمات هاست باشه یه جای دیگه هم تست کنید خبر بدید.

iroo
April 26th, 2017, 17:54
من کد ساده زیر رو با آدرسی که دادید در localhost و مرورگر فایرفاکس تست کردم مشکلی نبود:



<?php
$url = 'http://www.bing.com/search?q=%D8%B1%D8%AF%DB%8C%D8%A7%D8%A8+%D8%AE%D9% 88%D8%AF%D8%B1%D9%88&qs=n&form=QBLH&sp=-1&pq=%D8%B1%D8%AF%DB%8C%D8%A7%D8%A8+%D8%AE&sc=0-7&sk=&cvid=39FF7BBFBFD141A0BDCC155A8F6F6FD5';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$response = curl_exec($ch);
curl_close($ch);
header('Content-Type: text/html; charset=UTF-8');
echo $response;


شاید مشکل از تنظیمات هاست باشه یه جای دیگه هم تست کنید خبر بدید.

ممنون
این کار میکنه بله، چون دقیقا پارامتر ارسالی دقیقا فارسی نیست و کاراکترهای معاول ان است، شما به جای اون کاراکترها از فارسی استفاد کنید اون موقع کار نمی کنه

phpcoding
April 26th, 2017, 18:12
ممنون
این کار میکنه بله، چون دقیقا پارامتر ارسالی دقیقا فارسی نیست و کاراکترهای معاول ان است، شما به جای اون کاراکترها از فارسی استفاد کنید اون موقع کار نمی کنه

با سلام
شما اگر میخواید از کاراکتر های فارسی استفاده کنید میتونید از کد دوستمون استفاده کنید
منتها قسمتی از متغییر url رو از تابع urlencode رد کنید تا مقادیر قابل جستوجو url شوند

نمون کد دوستمون با ویرایشاتی که گفتم :


<?php
header('Content-Type: text/html; charset=UTF-8');
$url = 'http://www.bing.com/search?q='.urlencode('گروه طراحی چت روم تک استار');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>



تست کنید نتیجه رو اعلا کنید

iroo
April 26th, 2017, 19:18
phpcoding (http://www.webhostingtalk.ir/member.php?u=126755)
عزیز خیلی ممنونم، درست بود و کار کرد، ممنونم از شما