parsgreen.com
article

تعویض کد امنیتی captcha با ajax و mysql

mysql-ajax-captcha-refresh

در آموزش قبلی از بخش آموزش های کاربردی mysql با شیوه ساخت فرم تماس و ارسال نظرات به همراه کد امنیتی آشنا شدیم، همان طور که دیدیم برای ایجاد این گونه قابلیت ها باید از php ، html و mysql در یک ارتباط منطقی استفاده کنیم و در یک ساختار نسبتا ساده اطلاعات را از فرم html به کد php ارسال کرده و بعد از پردازش در جداول و ستون های mysql ذخیره کنیم، حال می خواهیم یک امکان دیگر نیز به برنامه خود اضافه کنیم، این امکان، قابلیت تعویض کد امنیتی (کد captcha) است که برای ایجاد آن باید از جاوا اسکریپت و آژاکس (ajax) نیز در کنار سایر کدهای خود بهره ببریم.

تابع آژاکس برای تعویض کد امنیتی


برای تعویض کد امنیتی یا captcha، قبل از هر چیز نیاز به یک موتور آژاکسی است تا درخواست کاربر را بدون رفرش شدن صفحه و در پس زمینه به سرور ارسال کرده و پاسخ آن را در یک بلاک div یا span نشان دهد، اما قبل از این کار باید یادآور شویم که آموزش حاضر مبتنی بر مطلب قبلی است که در بخش آموزش های کاربردی mysql با عنوان آموزش ساخت فرم تماس با php و mysql مطرح کرده ایم، لذا قبل از بررسی آن باید مطلب قبلی را مطالعه کرده باشید.
برای ایجاد موتور آژاکسی از توابع زیر استفاده می کنیم.
<script type="text/javascript">
//<![CDATA[
function Ajaxrequest(){
    var xmlHttp;
    try{
        //Firefox, Opera 8.0+, Safari    
        xmlHttp=new XMLHttpRequest();
        return xmlHttp;
    }
    catch (e){
        try{
            //Internet Explorer    
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
            return xmlHttp;
    }
    catch (e){
        try{
            //ActiveX
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            return xmlHttp;
            }
            catch (e){
                alert("مرورگر شما از آژاکس پشتیبانی نمی کند!");
                return false;
            }
        }
    }
}
var codediv = 'code-box';
var loadingdiv = 'loading';
var loadingmessage = '<img src="loading.gif" alt="loading" height="16" width="16" /> لطفا کمی صبر کنید...';
var empty = '';
var url = 'captcha.php';
function changecode(){
    var xmlHttp = Ajaxrequest();
    xmlHttp.onreadystatechange =  function(){
        if(xmlHttp.readyState > 0 && xmlHttp.readyState < 4){
            document.getElementById(loadingdiv).innerHTML=loadingmessage;
            }
            if (xmlHttp.readyState == 4) {
                document.getElementById(codediv).innerHTML=xmlHttp.responseText;
                document.getElementById(loadingdiv).innerHTML=empty;
                }
                }
                xmlHttp.open("GET", url, true);
                xmlHttp.send();
}
//]]>
</script>
توضیح:
- کد بالا دو تابع اصلی دارد، تابع changecode که درون خود از تابع دیگری به نام Ajaxrequest استفاده می کند، با فراخوانی تابع changecode (که در ادامه خواهیم دید)، تابع Ajaxrequest درخواست را به فایل captcha.php و با متد GET ارسال می کند، سپس پاسخ سرور که در واقع همان کد امنیتی است، توسط تابع changecode پردازش شده و نتیجه در بلاک با id فرضی code-box نشان داده می شود.
- همان طور که در آموزش های مقدماتی آژاکس (ajax) گفته ایم، پس از ارسال یک درخواست آژاکسی، وضعیت درخواست با readyState قابل دریافت است و این وضعیت با اعدادی از صفر تا 4 دریافت می شود، عدد 4 حالت کامل و در واقع نشانه پایان عملیات است، لذا در این بین (بین حالت صفر تا 4) می توان یک تصویر به عنوان در حال پردازش یا loading نمایش داد، این کار در کد بالا با دستورات شرطی if و خاصیت document.getElementById انجام شده است.
- با ترکیب متد document.getElementById و دستور innerHTML می توان مقادیری به بلاک های html نسب داد، به طور مثال یک تصویر و پیام را در آنها به نمایش درآورد.
- قسمت مربوط به responseText در واقع پاسخ سرور را در خود دارد، وقتی حالت آماده یا همان readyState برابر 4 می شود، پاسخ سرور در بلاک فرضی codediv به نمایش در می آید.
نکته 1: در کد بالا از یک تصویر کوچک با فرمت gif جهت نمایش حالت در حال پردازش (loading) استفاده شده است، برای اینکه این تصویر به درستی نمایش داده شود، باید آن را در کنار سایر فایل ها قرار دهید یا اینکه در قسمت img src در متغیر loadingmessage، آدرس دقیق تصویر را تنظیم کنید.
نکته 2: کد بالا را باید بین تگ های head قرار دهید یا اینکه به صورت یک فایل خارجی در صفحه به اصطلاح ایمپورت نمائید.

فراخوانی تابع آژاکس


پس از اضافه کردن موتور آژاکسی به صفحه خود، لازم است که توابع مبتنی بر جاوا اسکریپت را با رویداد onclick (یا سایر رویدادها در جاوا اسکریپت) فراخوانی کنیم، از طرفی برای مدیریت صحیح نمایش پیام در حال پردازش (loading) نیاز به بلاک div یا span با آی دی مشخص داریم، لذا فرم html را که در آموزش قبلی ساخته ایم، به صورت زیر ویرایش می کنیم.
<form action="contact.php" method="post">
<label for="name">نام:</label>
<input name="name" id="name" type="text" maxlength="255" /><br />
<label for="mail">ایمیل:</label>
<input name="mail" id="mail" type="text" maxlength="255" dir="ltr" /><br />
<label for="message">یادداشت:</label>
<textarea name="message" id="message" cols="35" rows="8">
</textarea><br />
<label for="code">کد امنیتی:</label>
<input name="code" id="code" type="text" class="code" />
<div class="code-box" id="code-box"><?php echo $code_1.' + '.$code_2 ?></div>&nbsp;<a href="#" onclick="changecode();">تعویض کد</a><span id="loading"></span><br />
<input type="hidden" name="check" value="1" />
<input type="submit" value="ارسال" />
</form>
ملاحظه می کنید که علاوه بر آی دی code-box، قسمت زیر نیز به فرم افزوده شده است.
<a href="#" onclick="changecode();">تعویض کد</a><span id="loading"></span>

پردازش اطلاعات در فایل captcha.php


پس از ارسال درخواست آژاکسی، در سرور و در واقع در فایل captcha.php (که آدرس آن را پیش تر در متغیر url تنظیم کرده ایم)، با بررسی ip کاربر، ضمن اینکه کد امنیتی را در دیتابیس به روز رسانی می کنیم، یک نسخه از پاسخ سرور را به عنوان responseText به درخواست آژاکسی تحویل می دهیم (با خروجی گرفتن توسط دستور echo در php)، سپس تابع changecode، پاسخ را تجزیه تحلیل کرده و در بلاک span با آی دی code-box نمایش می دهد (این کار با استفاده از متد document.getElementById و دستور innerHTML صورت می گیرد).
<?php
//اطلاعات اتصال به دیتابیس
$con = mysql_connect("localhost","root","")
or die(mysql_error());
//نام پایگاه داده
mysql_select_db("contact")
or die(mysql_error());
//ساخت کد امنیتی
$code_1 = rand(1,9);
$code_2 = rand(1,9);
$code = $code_1 + $code_2;
//دریافت آی پی کاربر
$ip = $_SERVER['REMOTE_ADDR'];
//بررسی وضعیت کاربر در سرور
$result = mysql_query("SELECT * FROM form WHERE userip = '$ip' AND status = 'temp' LIMIT 1")
or die(mysql_error());
$user_exist = mysql_num_rows($result);
if ($user_exist > 0){
    //به روز رسانی کد برای آی پی کاربر در دیتابیس
    mysql_query("UPDATE form SET code='$code' WHERE userip = '$ip' AND status = 'temp'" )
    or die(mysql_error());    
}
else{
    //ذخیره کد و آی پی کاربر در دیتابیس
    mysql_query("INSERT INTO form (code,userip,status) VALUES ('$code','$ip','temp')")
    or die(mysql_error());
}
//خروجی
echo $code_1.' + '.$code_2;
?>
نکته: روشی که در بالا برای تعویض کد امنیتی توضیح داده ایم تنها یک نمونه و جهت مثال بود، شما می توانید با الگو قرار دادن این روش و با کمی تجربه، ایده های ذهنی خود را پیاده کنید و از این نظر هیچ محدودیتی نیست.
sectionدسته بندی: آموزش کاربردی » MySQL
related مطالب بیشتر:
» آموزش ساخت فرم تماس با php و mysql
» آموزش ساخت فرم عضویت در سایت با php و mysql
» آموزش ساخت پنل ورود و خروج سایت با php و mysql
» جستجو در مطالب سایت با استفاده از MySQL Full-Text و PHP
» ساخت فید آر اس اس (RSS Feed)، با استفاده از php و mysql
commentنظرات (۱۹ یادداشت برای این مطلب ارسال شده است)
نویسنده: E99
زمان: ۱۹:۳۷:۵۲ - تاریخ: ۱۳۹۱/۰۸/۲۸
آیا این مطالب حاصل تلاش خودتون هست یا صرفا یک ترجمه از منبعی مثلا خارجی است؟؟
اگر ترجمه هست لطفا لینکش رو بزارید
وگرنه که واقعا خسته نباشین!!
پاسخ: 
خیر، هیچ یک از مطالب سایت ترجمه صرف از منابع خارجی نیست و تالیف، تست و بررسی شده اند، ممکن است در بخشی از مطالب از نمونه کدهای مشابه با سایر سایت ها استفاده شده باشد که در وب امری اجتناب ناپذیر و طبیعی است، به هر صورت موتور جستجویی به نام گوگل در اختیار شما است!
نویسنده: مهدی
زمان: ۱۲:۲۸:۵۹ - تاریخ: ۱۳۹۱/۰۹/۰۴
سایت جالبی دارید. این مطالب را به صورت کتاب در بیارید و در سایت برای فروش بزارید.
پاسخ: 
خیلی ممنون از نظر لطف و پیشنهاد شما.
نویسنده: masoume
زمان: ۱۹:۴۶:۳۱ - تاریخ: ۱۳۹۱/۰۹/۱۵
سلام خیلی ممنون از اطلاعاتی که تو سایتتون گذاشتین.
یه کمک ازتون می خواستم امیدوارم جوابم رو بدید.
من باید یه سایت برای آثار باستانی با php بسازم ولی نمی دونم بانک اطلاعاتش چی میشه. میشه کمک کنید من باید چه جداولی رو درست کنم.
ممنون میشم کمکم کنید
پاسخ: 
سلام
در استفاده از بانک اطلاعاتی هیچ بایدی وجود ندارد! اینکه چه جداول و ستون ها و از چه نوعی بسازید بستگی به هدف شما دارد، به طور مثال ممکن است بخواهید آثار هر دوره تاریخی در یک جدول که به فرض دارای ستون های id، name، year، value و... است ذخیره شده و بعد، از اطلاعات آنها در سایت استفاده شود (اسامی فرضی است و بستگی به خود شما دارد).
البته باید از قبل آشنایی مقدماتی با نحوه کار و ارتباط mysql و php داشته باشید تا بتوانید ساختار دیتابیس سایتتان را با آگاهی تعریف کنید.
نویسنده: leila
زمان: ۰۲:۳۰:۵۷ - تاریخ: ۱۳۹۱/۱۰/۱۹
سلام
واقعا از شما به خاطر همه اطلاعات تو سایتتون ممنونم .
« با آرزوی موفقیت بی پایان برای شما »
پاسخ: 
سلام
ممنون از نظر لطف شما.
نویسنده: ابراهیم
زمان: ۰۹:۱۷:۵۷ - تاریخ: ۱۳۹۲/۰۱/۰۶
سلام
سایت خیلی خیلی جالبی دارید. زکات علم را هم به نحو احسن پرداخت می کنید. ممنون کاش تمام دنیا مانند شما بودند و رایگان علم و دانش خود را آموزش می دهند.
یا حق
نویسنده: امیر
زمان: ۱۴:۴۳:۴۲ - تاریخ: ۱۳۹۲/۰۳/۱۹
سلام چطور میشه عکسی رو که کد امنیتی هست با آژاکس ریفرش کرد مثل :
<img src="seccode.php?i=<?=md5(rand(99,9999))?>" id=seccode>
مثل کد همین نظرات
پاسخ: 
سلام
سیستم کد امنیتی باید طوری طراحی شود که بتوان به وسیله یک درخواست آژاکسی کد را در سرور (فایل seccode.php) و همچنین در سمت کاربر تغییر داد (یعنی پس از تغییر کد در فایل seccode.php، نتیجه در قسمت نمایش کد امنیتی نشان داده شود)، این کار نیازمند آشنایی با جاوا اسکریپت و آژاکس است و جهت نمونه یک روش در آموزش توضیح داده شده، سایر موارد نیز مشابه و به همین طریق هستند.
نکته: برای حالت تصویر، باید در یک تابع جاوا اسکریپتی آدرس فایل کد امنیتی را فراخوانی و پاسخ را در قسمت src جایگزین نمائید (تابع باید با یک رویداد اجرا شود، در این رابطه به مباحث مقدماتی جاوا اسکریپت مراجعه کنید)، به طور مثال:
<script type="text/javascript">
function RefreshCaptcha(){
document.getElementById('seccode').src='seccode.php?rand='+Math.round(new Date().getTime()/1000);
}
</script>
قسمت آخر تابع برای جلوگیری از ذخیره یا به اصطلاح cache شدن تصویر در مرورگر است.
نویسنده: نفس
زمان: ۱۲:۰۹:۱۵ - تاریخ: ۱۳۹۲/۰۷/۲۴
سلام. خدا قوت. می بخشید من این کد رو اجرا میکنم درست اجرا میشه و با هر بار زدن تعویض کد کد عوض میشه ولی یه مشکلی که هست هر بار که روی تعویض کد کلیک میکنم صفحه میره بالا. یعنی پرش به بالای صفحه داره و باید اسکرول رو بکشم پایین تا کد رفرش شده رو ببینم و وارد کنم. شما میدونی مشکل کجاست؟
پاسخ: 
سلام
در این قسمت:
<a href="#" onclick="changecode();">تعویض کد</a><span id="loading"></span>
به جای کاراکتر # از عبارت زیر استفاده کنید:
javascript:void(0);
نویسنده: نفس
زمان: ۱۵:۳۱:۵۶ - تاریخ: ۱۳۹۲/۰۷/۲۴
مرسییییییییی واقعا ممنونم ازت حل شد
نویسنده: نفس
زمان: ۱۵:۴۵:۵۸ - تاریخ: ۱۳۹۲/۰۷/۲۴
راستی این کد تو موزیلا کار میکنه ولی اکسپلورر نه. دلیل خاصی داره؟ قابل حل شدن هست؟
پاسخ: 
باید دید چه خطایی در اینترنت اکسپلورر و در چه نسخه ای دریافت می کنید، نیاز به رفع باگ است.
نویسنده: نفس
زمان: ۱۸:۴۲:۱۴ - تاریخ: ۱۳۹۲/۰۷/۲۵
سلام مجدد. پیغام خطا نمیده. راستش از طریق اکسپلورر اطلاعات به درستی وارد دیتابیس میشه ولی پیغام اطلاعات با موفقیت اسال شد یا پیغام کد امنیتی اشتباه است رو نشون نمیده. در صورتی که تو موزیلا درسته.
1 مشکل دیگه اینکه وقتی پیغام کد امنیتی اشتباه است میاد و روی بازگشت کلیک می کنم بر می گرده ولی کد رو بطور خودکار رفرش نمیکنه.
پاسخ: 
سلام
تفاوت در عملکرد مرورگرها معمولا به کدنویسی سمت کاربر (HTML , JavaScript و...) مربوط می شود، برای گزینه بازگشت نیز نباید از مواردی مانند history back استفاده کنید، راه مناسب در این مورد استفاده از لینک با تگ a به صفحه اولیه است، یا اینکه صفحه ارسال و دریافت اطلاعات یکی باشد.
در هر صورت رفع اینگونه مشکلات بدون دیدن سورس صفحه و آزمایش و خطا، خیلی ساده نیست!
نویسنده: بهنام
زمان: ۰۰:۳۵:۲۳ - تاریخ: ۱۳۹۲/۱۲/۰۹
سلام واقعا از پست های مفید شما نهایت تشکر را دارم
من این کارهایی که گفتین رو انجام دادم و این کد را نوشتم
<?php
$code_1 = rand(1,9);
$code_2 = rand(1,9);
$code = $code_1 + $code_2;
echo $code;
if(isset($_POST['sub'])){
$tf = $_POST['tf'];
if($tf == $code){
echo 'درست است';
}else{
echo 'نادرست است';
}
}
?>
<form method="post">
<input type="text" name="tf" />
<input type="submit" name="sub" />
</form>
<form method="post">
<input type="text" name="tf" />
<input type="submit" name="sub" />
</form>
وقتی اون عدد را که چاپ میشود را درون فیلد وارد می کنم عملیات انجام نمیشه و میگه کد امنیتی اشتباه است هر باری که ریفرش می کنیم یه عددی به صورت رندم چاپ میشه و اگه اون عدد رو درون فیلد وارد می کنم میگه اشتباهه ولی اگه شانسی یه عدد وارد کنم که بعد از ریفرش صفحه اون عدد اگه بیاد درست می گیره یعنی باید عدد رندمی بعدیش را وارد کنی تا عملیات درست کار کنه مثلا عدد 16 میاد و اگه ریفرش کنیم عدد 12 قرار است بیاد و اگه 12 را وارد کنیم درست میگیره این مشکل را چگونه حل کنم با تشکر از هموطنان وبگو
پاسخ: 
سلام
آموزش متفاوت از بحثی است که شما نوشته اید! مطلب در رابطه با تعویض کد امنیتی ذخیره شده در دیتابیس با Ajax است، اما کدهای شما ظاهرا تستی برای یک سیستم captcha است، اشتباه شما این است که به جای ذخیره عدد قبلی و مقایسه آن با مقادیر ارسال شده توسط کاربر، عددی را که کاربر در فرم وارد می کند، با عدد جدید ایجاد شده توسط کدها مقایسه می کنید.
نویسنده: علی
زمان: ۰۱:۳۶:۳۵ - تاریخ: ۱۳۹۲/۱۲/۱۶
سلام
کد امنیتی فرم ورود من بصورت زیر هست
<td width="160" height="20"><img src="captcha.php"><input type="text" name="captcha" class="field"  id="captcha" /></td>
چطوری باید برای این کد ریفرش درست کنم؟
البته حروف کپچا با این کد ساخته میشن که تو صفحه ایندکس هستن
<?php
session_start();
$text='abcdefghijklmnopqrstuvwxyz123456789';
$code='';
for($i=1;$i<=6;$i++)
{
$start=rand(0,strlen($text));
$code.=substr($text,$start,1);
}
$_SESSION['code']=$code;
?>
چیکار باید کنم؟
پاسخ: 
سلام
ساده نیست!
هر چند به اطلاعات فایل captcha.php و ساختار کل کدها دسترسی نداریم، اما در تئوری:
1- باید یک فایل داشته باشید که با ارسال دستور آژاکسی اطلاعات سشن را به روز رسانی و نتیجه سشن را به صورت عدد یا عبارت برگرداند.
2- سپس در ادامه دستورات جاوا اسکریپتی، پارامتر مربوط به سشن آی دی را (عدد یا عبارت را) به کد captcha.php با استفاده از متد GET بدهید و img جدید را جایگزین img فعلی کنید (برای انجام راحت تر این کار می توانید img را داخل یک div با id مشخص قرار دهید و از innerHTML استفاده کنید).
نکته: در قسمت دوم از Ajax استفاده نکنید، بلکه با درج تگ img به همراه پارامتر مورد نیاز برای فایل captcha.php، تصویر ساخته خواهد شد، به فرض:
<img src="captcha.php?code=1234">
قاعدتا باید ساختار فایل captcha.php را طوری تغییر دهید که از مقادیر موجود در پارامتر code برای ایجاد کد امنیتی استفاده کند.
نویسنده: علی
زمان: ۱۲:۴۳:۱۲ - تاریخ: ۱۳۹۲/۱۲/۱۶
ممنون
کد ریفرش رو گذاشتم ولی حالا مشکلی که هست اینه که وقتی روی تعویض کد امنیتی کلیک می کنم کد امنیتی در باطن عوض میشه ولی کد امنیتی جدید تو سایت نمایش داده نمیشه
باید تو کد آجاکس تغییری ایجاد بشه؟
<?php
session_start();
$text='qwertyuiopasdfghjklzxcvbnm123456789';
$code='';
for($i=1;$i<=6;$i++)
{
$start=rand(0,strlen($text));
$code.=substr($text,$start,1);
}
$_SESSION['code']=$code;
?>
<script type="text/javascript">
//<![CDATA[
function Ajaxrequest(){
var xmlHttp;
try{
//Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
return xmlHttp;
}
catch (e){
try{
//Internet Explorer
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
return xmlHttp;
}
catch (e){
try{
//ActiveX
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
return xmlHttp;
}
catch (e){
alert("مرورگر شما از آژاکس پشتیبانی نمی کند!");
return false;
}
}
}
}
var codediv = 'captcha';
var loadingdiv = 'loading';
var loadingmessage = '<img src="images/loading.gif" alt="loading" height="16" width="100" /> لطفا کمی صبر کنید...';
var empty = '';
var url = 'index.php';
function changecode(){
var xmlHttp = Ajaxrequest();
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState > 0 && xmlHttp.readyState < 4){
document.getElementById(loadingdiv).innerHTML=loadingmessage;
}
if (xmlHttp.readyState == 4) {
document.getElementById("captcha").src="captcha.php";
document.getElementById(loadingdiv).innerHTML=empty;
}
}
xmlHttp.open("GET", url, true);
xmlHttp.send();
}
//]]>
</script>
اینم کد نمایش کپچای سایتم
<a href="javascript:void(0);" onclick="changecode();">تعویض کد</a><span id="loading"></span><img src="captcha.php">
پاسخ: 
عرض کردیم سشن آی دی جدید باید به عنوان یک پارامتر به کد captcha.php داده شود و این فایل به عنوان یک img جدید جایگیزین محتوای فعلی شود، حل مشکل نیاز به تست فایل ها دارد، در صورت تمایل فایل ها را با فرمت zip فشرده کرده و به ایمیل ما (در بخش تماس وجود دارد) ارسال کنید.
نویسنده: فاطمه
زمان: ۱۹:۰۹:۲۶ - تاریخ: ۱۳۹۲/۱۲/۱۶
با سلام
من کد بالا را اجرا می کنم اما در اولین اجرا خطای
Notice: Undefined variable: code_1 in
را نمایش می دهد و بعد از یک بار کلیک بر تعویض کد اعداد نمایش داده می شوند.
مسئله دیگر : آیا ارتباط با پایگاه داده در پروژه برای سرور مجازی xampp هم لازم است؟ مثلا کد
$_SERVER['REMOTE_ADDR']
یا status در چنین پروژه ای اجرا می شود؟
پاسخ: 
سلام
خطای اول به این خاظر است که کدها در دو فایل باید نوشته شوند، یک بار برای صفحه اصلی که در اولین بار یا با رفرش دستی صفحه نمایش داده می شود، یک بار هم وقتی که درخواست آژاکسی به فایل captcha.php ارسال و پاسخ دریافت می شود، در حال حاضر شما گام اول را انجام نداده اید، در مورد سوال دوم REMOTE_ADDR ارتباطی به پایگاه داده ندارد، این دستور IP کاربر را نمایش می دهد که در سرور مجازی معمولا به صورت عدد ثابت 127.0.0.1 مشخص می شود (اگر قصد تست کدها را دارید، این عدد را به صورت دستی در دیتابیس تغییر دهید).
نویسنده: الیاس
زمان: ۲۰:۳۲:۱۸ - تاریخ: ۱۳۹۳/۰۲/۱۱
سلام
درموقع کار با کتابخانه gd وقتی می خواهم متنی را به تصویر تبدیل کنم از تابع imagestring این کار را انجام می دهم و اگر متن لاتین باشد به خوبی کار می کند ولی متاسفانه در متن های فارسی کار نمی کنه و کاراکترهای (خاص و عجیبی) نشان می دهد و utf8 را پشتیبانی نمی کند.
لطفا راهنمایی کنید
پاسخ: 
سلام
برای پشتیبانی از زبان فارسی در کتابخانه GD پروژه ای مجزا نوشته شده که از لینک زیر می توانید آن را دریافت و استفاده کنید:
http://developer.berlios.de/project/showfiles.php?group_id=4533
paged صفحه 1 از 2




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

9 × 9
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...