PDA

View Full Version : سوال: مشکل تابع htmlentities با حروف فارسی



idocsidocs
چهارشنبه 28 دی 1390, 00:37 صبح
من برای امنیت از تابع htmlentities استفاده می کنم. یکی از دوستان گفت که این تابع ممکنه بعضی از کاراکترهای فارسی رو خراب کنه.

ایا این موضوع صحت داره؟ برای حل این مشکل باید چیکار کرد؟

ravand
چهارشنبه 28 دی 1390, 09:55 صبح
اين كد رو ببين دو تا خروجي بهت ميده . يه بار مقدار علي رو با utf-8 نوشتم و يه بارم بدون utf-8

<?php
$str = "علي";
echo htmlentities($str, ENT_QUOTES, "UTF-8");
echo "<br>";
echo htmlentities($str);
?>

خروجي :

علي
ع��

mbf5923
چهارشنبه 28 دی 1390, 10:30 صبح
کار این htmlentities چی هست؟
تا حالا در موردش نشنیده بودم

ravand
چهارشنبه 28 دی 1390, 10:41 صبح
ببين چجوري ازش استفاده شده يه سرچي در موردش بزن:

$name=htmlentities($_POST['name']);
$title=htmlentities($_POST['title']);

idocsidocs
چهارشنبه 28 دی 1390, 11:04 صبح
اين كد رو ببين دو تا خروجي بهت ميده . يه بار مقدار علي رو با utf-8 نوشتم و يه بارم بدون utf-8
اونطور که شنیدم وقتی توی این تابع از utf-8 هم استفاده کنیم بازم ممکنه با بعضی کاراکترهای فارسی مشکل پیدا کنه.

ravand
چهارشنبه 28 دی 1390, 11:10 صبح
چيزي نيست دادا . مگه ما چند تا كاراكتر فارسي داريم؟ همه رو امتحان كن ببين مشكل پيدا ميكنه يا نه؟ :لبخند:

idocsidocs
چهارشنبه 28 دی 1390, 11:37 صبح
سایر دوستان نظری ندارن؟

Unique
چهارشنبه 28 دی 1390, 23:07 عصر
htmlentities و htmlspecialchars برای برقراری امنیت از واجبات کد نویسی هستند و هیچ مشکلی با فارسی ندارند به شرطی که با UTF-8 Encoding استفاده بشوند.

idocsidocs
پنج شنبه 29 دی 1390, 00:15 صبح
htmlentities و htmlspecialchars برای برقراری امنیت از واجبات کد نویسی هستند و هیچ مشکلی با فارسی ندارند به شرطی که با UTF-8 Encoding استفاده بشوند.

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

tux-world
پنج شنبه 29 دی 1390, 00:16 صبح
خروجي :

علي
ع��
مطمئن هستید یونیکد صفحتون utf-8 هستش؟ من مطمئمن نیستم

Unique
جمعه 30 دی 1390, 00:20 صبح
من فکر کنم شما منظور من را بد فهمیدین ! منظور من امنیت در زمان نمایش بود نه در زمان ذخیره در دیتابیس ! htmlentities و htmlspecialchars امنیت کاملی برای درج اطلاعات در Database به وجود نمیارن ، شما باید escape کنی رشته ها را یا با PDO به صورت parameterized کار کنی تا امنیت درج اطلاعات انجام بشه ! برای نمایش هست که باید از htmlentities و htmlspecialchars استفاده کنین که xss و غیره براتون مشکل ساز نشه !

mamali-mohammad
جمعه 30 دی 1390, 12:04 عصر
به نظرم هنگام ذخیره از این کد استفاده کن :

$title=mysql_real_escape_string($_POST['title']);
$title=htmlspecialchars($title, ENT_QUOTES);
هنگام نمایش هم مستقیم از دیتابیس بکش بیرون

برای text و ادیتور هم بهتره از HTMLPurifier استفاده کنی
اینم دستوراتش :

require_once 'htmlpurifier-4.3.0/library/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$config->set('Cache.DefinitionImpl', null);
$purifier = new HTMLPurifier($config);

$text=$_POST['text'];
if(get_magic_quotes_gpc())
$text=stripcslashes($text);
$text = $purifier->purify($text);
$text=mysql_real_escape_string($text);

من از استفاده می کنم و تا الان مشکلی نداشتم

idocsidocs
جمعه 30 دی 1390, 12:31 عصر
به نظرم هنگام ذخیره از این کد استفاده کن :من هم دقیقا همین کار رو می کنم.

برای text و ادیتور هم بهتره از HTMLPurifier استفاده کنیبرای ادیتورها از این کلاس استفاده می کنم. اما یه سوال:
چطور می تونم توی HTMLPurifier کاری کنم که بغیر از یوتوب بشه فایلهای چند رسانه ای از سایر سرورها اجازه عبور از فیلتر داشته باشن؟

mamali-mohammad
جمعه 30 دی 1390, 13:17 عصر
توی خود سایت HTMLPurifier آموزش داده چطوری لیست سیاه و سفید ایجاد کنی

idocsidocs
جمعه 30 دی 1390, 14:40 عصر
توی خود سایت HTMLPurifier آموزش داده چطوری لیست سیاه و سفید ایجاد کنی

من چند روز قبل طبق همون انجام دادم ولی ارور داد !
می شه یه نمونه کد بهم بدید؟

mamali-mohammad
جمعه 30 دی 1390, 15:09 عصر
والله من تاحالا دنبال لیست سیاهش نبودم
اگه یاد گرفتم میزارم کدش رو

idocsidocs
جمعه 30 دی 1390, 15:28 عصر
والله من تاحالا دنبال لیست سیاهش نبودملیست سفیدش چطور؟ :چشمک:

mamali-mohammad
جمعه 30 دی 1390, 16:00 عصر
اینو به کدت اضافه کن :

$config->set('Filter.YouTube', false);

idocsidocs
جمعه 30 دی 1390, 16:22 عصر
اینو به کدت اضافه کن :این کد رو الان استفاده می کنم. اما فرض کنید که بخوام چندتا وب سایت رو جز لیست سفید قرار بدم تا فایلهای چند رسانه ای این وب سایتها اجازه عبور از فیلتر رو داشته باشن.

برای بقیه وب سایتها باید چیکار کنم؟

mamali-mohammad
جمعه 30 دی 1390, 17:19 عصر
اینو من برای لیست سیاه دادم

m_mili_k
یک شنبه 07 مرداد 1397, 20:04 عصر
من هم این مشکل رو دارم
اما در این کد که متن فارسی در پیامک ارسال شده بصورت D6%H8% در میاد






<recipient mobile="'.$to.'" originator="'.$from.'" doerid="8" >'.htmlentities($text).'</recipient>





لطفا منو مستفیض نمایید

m_mili_k
یک شنبه 07 مرداد 1397, 22:43 عصر
خودم حلش کردم







<recipient mobile="'.$to.'" originator="'.$from.'" doerid="8" >'.urldecode($text).'</recipient>