PDA

View Full Version : سوال: کمک برای جلوگیری از نمایش \r\n



mamali-mohammad
سه شنبه 03 آبان 1390, 18:05 عصر
سلام
من برای فرم تماس با از این کدها استفاده کردم :

$text=mysql_real_escape_string($_POST['text']);
$text=htmlspecialchars($text, ENT_QUOTES);
مشکل اینجاست بعد از ذخیره ، بجای زدن ENTER اینو چاپ میکنه : \r\n
مثلا اگه متن این باشه :
سلام
خوبی ؟
چه خبر ؟

اینجوری چاپ میشه :
سلام \r\n خوبی ؟ \r\n چه خبر ؟

MSN_Issue
سه شنبه 03 آبان 1390, 19:42 عصر
$order = array("\r\n", "\n", "\r");
$replace = '<br />';

$text = str_replace($order, $replace, $text);

mamali-mohammad
سه شنبه 03 آبان 1390, 20:00 عصر
نشد داداش
جایگزین نمیکنه

mamali-mohammad
سه شنبه 03 آبان 1390, 23:02 عصر
چه کنیم دوستان ؟
راه حلی ؟

MSN_Issue
سه شنبه 03 آبان 1390, 23:20 عصر
کدهایی که من گذاشتم رو بعد از کدهای خودتون گذاشتی دیگه !!!؟؟؟؟:متفکر:

mamali-mohammad
سه شنبه 03 آبان 1390, 23:58 عصر
آره
بعد از کد خودم قرار میگیره

mamali-mohammad
چهارشنبه 04 آبان 1390, 12:01 عصر
دوستان چه کنیم ؟

MMSHFE
چهارشنبه 04 آبان 1390, 18:17 عصر
با سلام، از تابع nl2br استفاده كردين؟ ضمناً توي سورس كد رو بررسي كنيد شايد به جاي \ توي سورس كد \\ باشه كه بايد تابع str_replace رو مطابق اون تنظيم كنيد. موفق باشيد.

mamali-mohammad
چهارشنبه 04 آبان 1390, 20:21 عصر
عینان کد دوستمون رو گذاشتم ، اما جواب نداد
البته منظور من echo شده در textarea هست

mamali-mohammad
پنج شنبه 05 آبان 1390, 00:20 صبح
اگه mysql_real_escape_string رو بردارم آرایه کار میده
اما بدون escape نمیشه ثبت کرد
خطرناکه

hrzrahimi
پنج شنبه 05 آبان 1390, 00:26 صبح
دوستمون MSHFE (http://barnamenevis.org/member.php?55504-MMSHFE) فرمودند.
از nl2br استفاده کن


echo nl2br($text);

mamali-mohammad
پنج شنبه 05 آبان 1390, 13:27 عصر
دوستان چه کنیم ؟

MMSHFE
پنج شنبه 05 آبان 1390, 16:15 عصر
دوست عزيز، توي همون صفحه اي كه عبارت «سلام \r\n خوبی ؟ \r\n چه خبر ؟» چاپ ميشه، سورس كد صفحه (Ctrl+U توي فايرفاكس و View -> Source Code توي اينترنت اكسپلورر) رو بيارين و ببينيد چي نوشته شده. براي مثال، ممكنه اينطوري ببينيد:
سلامr\\n\\خوبي؟r\\n\\چه خبر؟
كه اگه اينطوري باشه (كه احتمالاً هم همينطوره چون كدتون Escape شده)، بايد اينطوري عمل كنيد:


$text = str_replace('\\\\', '\\', $text);

تا كاركترهاي \\ به \ تبديل بشن يا اين راه كه البته براي \ فكر نكنم جواب بده اما كلاً براي برگردوندن رشته اي كه با htmlspecialchars كد شده به رشته اصلي كاربرد داره:


$text = htmlspecialchars_decode($text);

علت اينكه ميگم روش دوم احتمالاً كار نميكنه اينه كه تبديل \ به \\ به نظرم مياد بخاطر mysql_real_escape_string باشه ولي در هر حال، شما هر دو راه رو امتحان كنيد. اميدوارم مشكلتون برطرف بشه. موفق باشيد.

ghasemweb
پنج شنبه 05 آبان 1390, 18:14 عصر
سلام من هم این مشکل رو داشتم کد دوستمون رو به این حالت ویرایش کردم درست شد.:چشمک:



$order = array("\r\n", "\n", "\r","\\r\\n", "\\n", "\\r");
$replace = '<br />';
$ttext = str_replace($order, $replace, $ttext);

mamali-mohammad
پنج شنبه 05 آبان 1390, 22:03 عصر
ممنون عزیز
مشکل حل شد
حالا یه مشکل دیگه ، من به جای این کارکتر ها گفتم <br/> بزاره
حالا مشکل اینجاست در صفحه اینطوری چاپ میشه :
سلام
خوبی ؟

اما در Textarea این چاپ میشه :
سلام<br/>خوبی ؟

ghasemweb
جمعه 06 آبان 1390, 03:16 صبح
خوب مشکلش چیه؟ تگ br تو صفحه درست عمل میکنه . شما میخوای که تو تکس آریا هم حالت اینتر عمل کنه؟ اگه غیره اینه واضح تر توضیح بدید لطفا که چی میخوایید؟

MMSHFE
جمعه 06 آبان 1390, 12:11 عصر
دوست عزيز شما نبايد با </br> جايگزين كنيد. كافيه \\ رو با \ جايگزين كنيد تا توي TextArea درست نشون داده بشه. موقع نمايش توي صفحه هم با كمك تابع nl2br متن دريافتي از TextArea رو به شكل درست توي صفحه نشون بدين. موفق باشيد.

mamali-mohammad
جمعه 06 آبان 1390, 12:23 عصر
خوب مشکلش چیه؟ تگ br تو صفحه درست عمل میکنه . شما میخوای که تو تکس آریا هم حالت اینتر عمل کنه؟ اگه غیره اینه واضح تر توضیح بدید لطفا که چی میخوایید؟


بله میخوام حالت enter داشته باشه


دوست عزيز شما نبايد با </br> جايگزين كنيد. كافيه \\ رو با \ جايگزين كنيد تا توي TextArea درست نشون داده بشه. موقع نمايش توي صفحه هم با كمك تابع nl2br متن دريافتي از TextArea رو به شكل درست توي صفحه نشون بدين. موفق باشيد.
متوجه نشدم
کد کاملش رو میزارید ؟
ممنون

mamali-mohammad
جمعه 06 آبان 1390, 20:08 عصر
دوستان یه کمک کنید من کارم تمومه
ممنون

mamali-mohammad
شنبه 07 آبان 1390, 13:52 عصر
دوستان یه کمک کوچیک کار منو راه میندازه
ممنون میشم

MMSHFE
شنبه 07 آبان 1390, 16:47 عصر
ببينيد، فرض ميكنيم شما هرچي كه از كاربر گرفتين رو بعد از اجراي اين دو دستور كه توي پاسخ اول همين بحث خودتون اشاره كردين، توي ديتابيس ذخيره ميكنيد:


$text=mysql_real_escape_string($_POST['text']);
$text=htmlspecialchars($text, ENT_QUOTES);

حالا هم فرض كنيد اطلاعات رو به همون شكلي كه توي ديتابيس ذخيره شده، از اون خوندين و درواقع چنين چيزي توي ديتابيس ذخيره شده و شما همين مقدار رو بعد از خوندن، توي متغير text$ ذخيره كردين:
سلامr\\n\\خوبي؟r\\n\\چه خبر؟
حالا اگه بخواين اين اطلاعات رو به شكل درست توي TextArea به كاربر نشون بدين بايد اينطوري بنويسيد:


echo '<textarea>'.str_replace('\\\\', '\\', $text).'</textarea>';

ولي اگه همين اطلاعات رو بخواين مستقيماً توي صفحه (نه داخل يك TextArea) نمايش بدين، بايد اينطوري بنويسيد:


$text = str_replace('\\\\', '\\', $text);
echo nl2br($text);

در حالت اول، توي TextArea و در حالت دوم، مستقيماً توي خود صفحه خروجي مشابه زير خواهيد داشت:
سلام
خوبي؟
چه خبر؟
موفق باشيد.

mamali-mohammad
شنبه 07 آبان 1390, 21:54 عصر
نشد داداش
میندازه کنار هم
میخوام حالت enter در textarea داشته باشه

tux-world
چهارشنبه 11 آبان 1390, 08:26 صبح
خوب آخر سر خودتون با همون كدي كه دوستمون گفت يه خط جديد با اون كاراكترها بذاريد انتهاش