PDA

View Full Version : یک سوال ابتدایی درباره PHP



javad2000
دوشنبه 17 خرداد 1389, 19:25 عصر
سلام
من یک فرم دارم که می خواهم کاربر بتواند داخل آن، کدهای HTML وارد کند. اما مشکل اینجاست که هر چیزی داخل فرم می نویسم، قسمت هایی که علامت کوتیشن (') یا دابل کوتیشن (") داشته باشند را برنامه به طور خودکار تغییر می دهد و بک اسلش (\) به آنها اضافه می کند. مثلاً اگر کاربر داخل فرم بنویسد:
"Hello"
برنامه آن را اینطور نمایش می دهد:
\"hello\"
لطفاً بگویید باید برای رفع این مشکل چکار کنم؟
خلاصه برنامه خود را در پایین می گذارم:



<?php
$message=$_REQUEST[message];
$form="
<form name='form1' method='POST'>
<br><b>Message:</b>
<br><input type='text' name='message'/><br>
<input type='submit' value='send'><input type='reset' value='reset'>

</form>
";
echo $form;
echo "<br><b>Message:</b><br>$message";


?>

yasgig
دوشنبه 17 خرداد 1389, 20:19 عصر
به نظرم اگه باهاش کاری نداشته باشی بهتره چون از SQL Injection جلوگیری میکنه و امنیت سایتتون رو می بره بالا.

kimiaaa
دوشنبه 17 خرداد 1389, 20:46 عصر
مثلاً اگر کاربر داخل فرم بنویسد:
"Hello"
برنامه آن را اینطور نمایش می دهد:
\"hello\"

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

<?php
$message=$_REQUEST[message];
$form="
<form name=\"form1\" method=\"POST\">
<br><b>Message:</b>
<br><input type=\"text\" name=\"message\"></br>
<input type=\"submit\" value=\"send\"><input type=\"reset\" value=\"reset\">

</form>
";
echo $form;
echo "<br><b>Message:</b><br>$message";


?>

javad2000
سه شنبه 18 خرداد 1389, 00:22 صبح
سلام
کد شما را هم امتحان کردم ولی تغییری نکرد و مشکل همچنان باقی است. برنامه، قبل از کوتیشن ها بک اسلش اضافه می کند. این موضوع، در بیشتر مواقع مشکلی ایجاد نمی کند ولی برای من یک مشکل اساسی ایجاد کرده است.
همانطور که می بینید، برنامه، شامل یک تکست باکس است ککه وقتی کدهای HTML را داخل آن بنویسیم، خروجی HTML را نمایش می دهد. اما فرض کنید من یک کد بنویسم برای این که یک نوشته فارسی، به صورت «راست به چپ» نمایش داده شود. اگر آن کد را مستقیماً داخل PHP بنویسم، خروجی HTML کاملاً درست و از راست به چپ نمایش داده می شود اما اگر داخل این تکست باکس بنویسم، خروجی HTML به صورت «چپ به راست» دیده می شود. در واقع، قرار است که نوشته های این تکست باکس، برای کاربران، ایمیل شود. اگر متن ایمیل را به صورت کد بنویسم، ایمیل ها کاملاً راست به چپ و درست ارسال می شوند اما اگر داخل تکست باکس بنویسم، چپ به راست می شوند! :( اگر خواستید کد کامل را اینجا بگذارم.

آیا راهی هست که جلوی اضافه شدن بک اسلش را بگیریم؟ مثلاً دستوری مثل htmlspecialchars یا htmlentities که می دانم در ارتباط با همین قضایا هستند اما نتوانستم کاربرد دقیقشان را بفهمم.

متشکرم

yasgig
سه شنبه 18 خرداد 1389, 10:01 صبح
شاید بشه از str_replace هم استفاده کرد که اگه بک اسلش رو پیدا کرد با یه چیزی جایگزین کنه.

kimiaaa
سه شنبه 18 خرداد 1389, 11:01 صبح
کد شما را هم امتحان کردم ولی تغییری نکرد و مشکل همچنان باقی است. برنامه، قبل از کوتیشن ها بک اسلش اضافه می کند. این موضوع، در بیشتر مواقع مشکلی ایجاد نمی کند ولی برای من یک مشکل اساسی ایجاد کرده است.
من دوباره كدتون رو رو سيستمم امتحان كردم اما چون بدون اسلش نشون ميده و مشكلي نداره نميتونم بيشتر كمكتون كنم اما درمورد اينكه متن ها رو راست به چپ نشون بده ميتونم بهتون بگم كه فرم رو داخل يه جدول تعريف كنيد و dir:rtl رو به جدول بديد فرم در سمت راست قرار ميگيره و نوشته ها هم از سمت راست وارد ميشن اگه خواستيد بگيد نمونه اين فرم رو براتون بذارم

pashaie
سه شنبه 18 خرداد 1389, 12:14 عصر
آیا راهی هست که جلوی اضافه شدن بک اسلش را بگیریم؟
احتمالا تو نتظیمات Php شما Magic Quotes ست شده. کافیه که اونو غیر فعال کنید.

تو فایل php.ini چک کن که این مقدار ها درست باشند




; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off