<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>.: Mr.cAm - Y: cuong_pho_nui :. &#187; Lập trình</title>
	<atom:link href="http://phamcuong.info/category/lap-trinh/feed/" rel="self" type="application/rss+xml" />
	<link>http://phamcuong.info</link>
	<description>Khám phá thế giới (^o^)</description>
	<lastBuildDate>Tue, 27 Jul 2010 03:02:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Dùng tiếng việt unicode utf-8 trong php</title>
		<link>http://phamcuong.info/2010/04/06/dung-ti%e1%ba%bfng-vi%e1%bb%87t-unicode-utf-8-trong-php/</link>
		<comments>http://phamcuong.info/2010/04/06/dung-ti%e1%ba%bfng-vi%e1%bb%87t-unicode-utf-8-trong-php/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 00:20:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tiếng việt]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=900</guid>
		<description><![CDATA[Khi chuyển database MySQL từ phiên bản 3.x lên 4.1 trở đi bạn sẽ gặp vấn đề với mã font Unicode, để khắc phục tình trạng này bạn có thể làm theo hướng dẫn sau: 1. Import database vào MySQL 4.1 – 5.0.x: Khi import file database là dạng mã unicode (File sql của bạn [...]]]></description>
			<content:encoded><![CDATA[<p>Khi chuyển database MySQL từ phiên bản 3.x lên 4.1 trở đi bạn sẽ gặp  vấn  đề với mã font Unicode<span id="more-900"></span>, để khắc phục tình trạng này bạn có thể làm  theo hướng  dẫn sau:</p>
<p>1. Import database vào MySQL 4.1 – 5.0.x:<br />
Khi import file  database là dạng mã unicode (File sql của bạn phải chắc  chắn là định dạng  unicode utf8) vào MySQL 4.1 trở lên trước tiên bạn  vào phpMyAdmin tạo database  với Collation của Charset là định dạng utf8  chẳng hạn chọn utf8_general_ci sau  đó click Create như hình sau:<br />
<img src="http://tinypic.com/aotd9v.jpg" alt="Hình ảnh" /><br />
Sau khi tạo xong bạn click chọn SQL để  import database:<br />
<img src="http://tinypic.com/aoteuh.jpg" alt="Hình ảnh" /><br />
Tới đây bạn Browse file database của bạn chú ý muc Character set of the  file  phải để là utf8 click Go để kết thúc import.<br />
Bây giờ bạn có thể xem tiếng  việt thể hiện trong phpMyAdmin đúng theo  đinh dạng unicode utf8.<br />
<img src="http://tinypic.com/aotm6x.jpg" alt="Hình ảnh" /><br />
2. Hiển thị unicode utf8  trên web PHP:<br />
Tuy ở trên bạn đã import và hiển thị đúng với định dạng  unicode utf8  tuy nhiên khi bạn chay một số ứng dụng web PHP của bạn sẽ vẫn gặp  lỗi  hiển thị unicode như sau (font unicode bị hiển thị thành dấu ? và ô  vuông):<br />
<img src="http://tinypic.com/aotmj8.jpg" alt="Hình ảnh" /><br />
Để khắc phục  vấn đề này MySQL cung cấp cho bạn một câu truy vấn SET  NAMES ‘utf8′ , Trong php  sau câu truy vấn kết nối database bạn thực  hiện thêm một câu truy vấn như đoạn  code sau:<br />
Ví dụ:<br />
&lt;?<br />
$dbhost =”localhost”;<br />
$dbname  =”mediaonline “;<br />
$dbuser =”chilinhnet”;<br />
$dbpass =”chilinh”;<br />
$db  =mysql_connect(“$dbhost”,”$dbuser”,”$dbpass”) or die(“Die connect:   “.mysql_error());<br />
mysql_select_db(“$dbname”) or die(“Die select database:   “.mysql_error());<br />
mysql_query(“SET NAMES ‘utf8′”, $db);<br />
?&gt;<br />
Bây  giờ thì bạn hoàn toàn yên tâm với việc thể hiện tiếng việt Unicode  utf8 100%  trên website PHP:<br />
<img src="http://tinypic.com/aotmrk.jpg" alt="Hình ảnh" /><br />
Chú ý: Đối với một số hosting không cho phép bạn tạo Collation Charset  khi  tạo database mới từ phpMyAdmin (thường là các phiên bản phpMyAdmin  cũ) bạn cũng  có thể làm theo cách sau:</p>
<p>Bạn vẫn tạo database và import database bình  thường (Mặc định những  hosting đó sẽ cấu hình MySQL là Latin1), trong trường hợp  có những tùy  chọn Chatset bạn cũng phải chọn là Latin1. Lúc này trong phpMyAdmin  bạn  sẽ không thấy hiển thị tiếng việt Unicode utf8 bởi vì phpMyAdmin đã gắn  đoạn  code SET NAMES ‘utf8′, tuy nhiên khi browse web site php của bạn  sẽ hiển thị  đúng tất nhiên là bạn không được phép sử dụng đoạn code SET  NAMES ‘utf8′ trong  mã lên của bạn khi dùng cách import này.</p>
<div><script type="text/javascript">// <![CDATA[
google_ad_client = "pub-6107623425930461";
google_alternate_color = "FFFFFF";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text_image";
google_ad_channel ="9500465767";
google_color_border = "";
google_color_link = "";
google_color_bg = "";
google_color_text = "";
google_color_url = "";
google_ui_features = "rc:10";
// ]]&gt;</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins><ins></ins></ins></div>
<p style="text-align: right;"><strong><em>Author:<br />
Lê Chí Linh</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2010/04/06/dung-ti%e1%ba%bfng-vi%e1%bb%87t-unicode-utf-8-trong-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tài liệu thiết kế web</title>
		<link>http://phamcuong.info/2010/03/11/tai-li%e1%bb%87u-thi%e1%ba%bft-k%e1%ba%bf-web/</link>
		<comments>http://phamcuong.info/2010/03/11/tai-li%e1%bb%87u-thi%e1%ba%bft-k%e1%ba%bf-web/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 08:28:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[thiết kế web]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=840</guid>
		<description><![CDATA[Một số tài liệu miễn phí về thiết kế web các bạn có thể download tại đây: Tài liệu về PHP và MySQL: Tai-lieu-lap-trinh-php-voi-mysql-01.pdf Tai-lieu-lap-trinh-php-voi-mysql-02.pdf Tai-lieu-lap-trinh-php-voi-mysql-03.pdf Tai-lieu-LaptrinhPHPvaMySQL.pdf Tai-Lieu-PHP.MySQL-Thiet-Ke-Web-Dong.pdf Tai-lieu-PHP-coding-standard.doc Tai-lieu-Learning-PHP-MySQL.pdf Tài liệu về ASP: Tai-lieu-ASP-TiengViet.rar Tai-lieu-lap-trinh-asp-01.pdf Tai-lieu-lap-trinh-asp-02.pdf Tai-lieu-lap-trinh-Asp-Tieng-Viet.pdf Tài liệu về CSS: Tai-lieu-css.doc Tai-lieu-css-co-ban.pdf Tai-lieu-HTML-CSS.rar Tai-lieu-CSS-Tieng-Viet-Co-Ban.pdf Tài liệu về Dreamweaver: Tai-lieu-dreamweaver8.rar Tai-lieu-dreamweaver.rar Tai-lieu-dreamweaver-mx-tieng-viet.pdf Tai-lieu-Su-Dung-Dreamweaver.pdf Tai-lieu-Xay-Dung-Trang-Web-Dong-Voi-DreamweaverMX.doc [...]]]></description>
			<content:encoded><![CDATA[<p>Một số tài liệu miễn phí về thiết kế web các bạn có thể download tại  đây:<span id="more-840"></span></p>
<p><strong>Tài liệu về PHP và MySQL:</strong></p>
<div><a href="http://www.ahuyweb.com/download/tai-lieu-lap-trinh-php-voi-mysql-01.pdf">Tai-lieu-lap-trinh-php-voi-mysql-01.pdf</a><br />
<a href="http://www.ahuyweb.com/download/tai-lieu-lap-trinh-php-voi-mysql-02.pdf">Tai-lieu-lap-trinh-php-voi-mysql-02.pdf</a><br />
<a href="http://www.ahuyweb.com/download/tai-lieu-lap-trinh-php-voi-mysql-03.pdf">Tai-lieu-lap-trinh-php-voi-mysql-03.pdf</a><br />
<a href="http://www.ahuyweb.com/download/Tai-lieu-LaptrinhPHPvaMySQL.pdf">Tai-lieu-LaptrinhPHPvaMySQL.pdf</a><br />
<a title="Tài liệu PHP MYSQL Thiết kế web Động" href="http://www.ahuyweb.com/download/Tai-Lieu-PHP.MySQL-Thiet-Ke-Web-Dong.pdf">Tai-Lieu-PHP.MySQL-Thiet-Ke-Web-Dong.pdf</a><br />
<a title="Tài liệu PHP - coding - standard" href="http://www.ahuyweb.com/download/Tai-lieu-PHP-coding-standard.doc">Tai-lieu-PHP-coding-standard.doc</a><br />
<a title="Learning PHP - MySQL" href="http://www.ahuyweb.com/download/Tai-lieu-Learning-PHP-MySQL.pdf">Tai-lieu-Learning-PHP-MySQL.pdf</a></div>
<p><strong>Tài liệu về ASP: </strong></p>
<div><a title="Tài liệu ASP tiếng Việt" href="http://www.ahuyweb.com/download/tai-lieu-lap-trinh-asp-01.pdf">Tai-lieu-ASP-TiengViet.rar</a><br />
<a title="tài liệu lập trình ASP phần 01" href="http://www.ahuyweb.com/download/tai-lieu-lap-trinh-asp-01.pdf">Tai-lieu-lap-trinh-asp-01.pdf</a><br />
<a title="tài liệu lập trình ASP phần 02" href="http://www.ahuyweb.com/download/tai-lieu-lap-trinh-asp-02.pdf">Tai-lieu-lap-trinh-asp-02.pdf</a><br />
<a title="tài liệu ASP tiếng Việt" href="http://www.ahuyweb.com/download/tai-lieu-lap-trinh-Asp-Tieng-Viet.pdf">Tai-lieu-lap-trinh-Asp-Tieng-Viet.pdf</a></div>
<p><strong>Tài liệu về CSS:</strong></p>
<div><a title="Tài liệu CSS" href="http://www.ahuyweb.com/download/tai-lieu-css.doc">Tai-lieu-css.doc</a><br />
<a title="Tài liệu css cơ bản" href="http://www.ahuyweb.com/download/tai-lieu-css-co-ban.pdf">Tai-lieu-css-co-ban.pdf</a><br />
<a title="Tài liệu HTML CSS" href="http://www.ahuyweb.com/download/Tai-lieu-HTML-CSS.rar">Tai-lieu-HTML-CSS.rar</a><br />
<a title="Tài liệu CSS Tiếng Việt Cơ Bản" href="http://www.ahuyweb.com/download/Tai-lieu-CSS-Tieng-Viet-Co-Ban.pdf">Tai-lieu-CSS-Tieng-Viet-Co-Ban.pdf</a></div>
<p><strong>Tài liệu về Dreamweaver:</strong></p>
<div><a title="Tài liệu Dreamweaver8" href="http://www.ahuyweb.com/download/tai-lieu-dreamweaver8.rar">Tai-lieu-dreamweaver8.rar</a><br />
<a title="Tài liệu dreamweaver" href="http://www.ahuyweb.com/download/tai-lieu-dreamweaver.rar">Tai-lieu-dreamweaver.rar</a><br />
<a title="Tài liệu Dreamweaver MX tiếng Việt" href="http://www.ahuyweb.com/download/tai-lieu-dreamweaver-mx-tieng-viet.pdf">Tai-lieu-dreamweaver-mx-tieng-viet.pdf</a><br />
<a title="Tài liệu sử dụng Dreamweaver" href="http://www.ahuyweb.com/download/Tai-lieu-Su-Dung-Dreamweaver.pdf">Tai-lieu-Su-Dung-Dreamweaver.pdf</a><br />
<a title="Tài liệu xây dựng web động với Dreamweaver" href="http://www.ahuyweb.com/download/tai-lieu-Xay-Dung-Trang-Web-Dong-Voi-DreamweaverMX.doc">Tai-lieu-Xay-Dung-Trang-Web-Dong-Voi-DreamweaverMX.doc</a></div>
<p><strong>Tài liệu về Ajax:</strong></p>
<div><a title="tài liệu Ajax" href="http://www.ahuyweb.com/download/Tai-lieu-AJAX.rar">Tai-lieu-AJAX.rar</a><br />
<a title="Tài liệu Ajax basic" href="http://www.ahuyweb.com/download/Tai-lieu-AJAX-BASIC.zip">Tai-lieu-AJAX-BASIC.zip</a><br />
<a title="Tài liệu hướng dẫn Ajax" href="http://www.ahuyweb.com/download/Tai-lieu-Huong%20Dan%20AJAX.pdf">Tai-lieu-Huong  Dan AJAX.pdf</a></div>
<p><strong>Tài liệu về Flash:</strong></p>
<div><a title="Tài liệu Flash MX 2004 Action Script" href="http://www.ahuyweb.com/download/Tai-lieu-Flash-MX-2004-Action-Script-Training-from-the-Source.chm">Tai-lieu-Flash-MX-2004-Action-Script-Training-from-the-Source.chm</a><br />
<a title="Tài liệu Flash MX 2004" href="http://www.ahuyweb.com/download/Tai-lieu-Flash-MX-2004-and-Video.pdf">Tai-lieu-Flash-MX-2004-and-Video.pdf</a><br />
<a title="Tài liệu 24 giờ học Flash" href="http://www.ahuyweb.com/download/Tai-lieu-24-Gio-Hoc-Flash.pdf">Tai-lieu-24-Gio-Hoc-Flash.pdf</a><br />
<a title="Tài liệu Flash Action Script" href="http://www.ahuyweb.com/download/Tai-lieu-Flash-Action-Script.rar">Tai-lieu-Flash-Action-Script.rar</a><br />
<a title="Tài liệu MF Việt" href="http://www.ahuyweb.com/download/Tai-lieu-MF-Viet.pdf">Tai-lieu-MF-Viet.pdf</a></div>
<p><strong>Tài liệu về Photoshop:</strong></p>
<div><a title="Tài liệu hướng dẫn Photoshop" href="http://www.ahuyweb.com/download/Tai-lieu-Huong%20Dan%20Photoshop.chm">Tai-lieu-Huong  Dan Photoshop.chm</a><br />
<a title="Tài liệu Photoshop CS3" href="http://www.ahuyweb.com/download/Tai-lieu-PhotoshopCS3.pdf">Tai-lieu-PhotoshopCS3.pdf</a><br />
<a title="Cài đặt giáo trình Photoshop" href="http://www.ahuyweb.com/download/Tai-lieu-Giao-trinh-Photoshop.exe">Tai-lieu-Giao_trinh_Photoshop.exe</a></div>
<p><strong>Tài liệu về JSP:</strong></p>
<div><a title="Tài liệu về JSP" href="http://www.ahuyweb.com/download/Tai-lieu-18-Can-ban-JSP.rar">Tai-lieu-18-Can-ban-JSP.rar</a><br />
<a title="Tài liệu căn bản JSP" href="http://www.ahuyweb.com/download/Tai-lieu-Can-ban-JSP.pdf">Tai-lieu-Can-ban-JSP.pdf</a><br />
<a title="Tài liệu corejava" href="http://www.ahuyweb.com/download/Tai-lieu-corejava.rar">Tai-lieu-corejava.rar</a><br />
<a title="Tài liệu javascript" href="http://www.ahuyweb.com/download/Tai-lieu-Javascript.pdf">Tai-lieu-Javascript.pdf</a></div>
<div></div>
<div style="text-align: right;">Copy from: ahuyweb.com</div>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2010/03/11/tai-li%e1%bb%87u-thi%e1%ba%bft-k%e1%ba%bf-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lỗi connect database, xa xưa nhưng gây lỗi 500</title>
		<link>http://phamcuong.info/2009/12/10/l%e1%bb%97i-connect-database-xa-x%c6%b0a-nh%c6%b0ng-gay-l%e1%bb%97i-500/</link>
		<comments>http://phamcuong.info/2009/12/10/l%e1%bb%97i-connect-database-xa-x%c6%b0a-nh%c6%b0ng-gay-l%e1%bb%97i-500/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 16:59:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[connect]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[lỗi 500]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=597</guid>
		<description><![CDATA[Tối đẹp trời này tớ đã bị mắc lỗi này và mất cả tiếng đồng hồ ngồi gãi đầu, mãi mới nhớ ra. HTTP Status 500 - type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception java.lang.NullPointerException Đây là dòng báo lỗi của em [...]]]></description>
			<content:encoded><![CDATA[<p>Tối đẹp trời này tớ đã bị mắc lỗi này và mất cả tiếng đồng hồ ngồi gãi đầu, mãi mới nhớ ra.</p>
<p><span id="more-597"></span></p>
<h1>HTTP Status 500 -</h1>
<hr size="1" noshade="noshade" /><strong>type</strong> Exception report</p>
<p><strong>message</strong></p>
<p><strong>description</strong> <span style="text-decoration: underline;">The server encountered an internal error () that  prevented it from fulfilling this request.</span></p>
<p><strong>exception</strong></p>
<pre>java.lang.NullPointerException</pre>
<p>Đây là dòng báo lỗi của em nó.</p>
<p>Và nguyên nhân là do trong lớp connectDB thiếu 1 dòng.</p>
<p>Trước là như vầy:</p>
<blockquote><p>Connection connection = null;<br />
try {<br />
connection = DriverManager.getConnection(&#8220;jdbc:postgresql://localhost:5432/caxxx&#8221;,&#8221;postgres&#8221;,&#8221;xxxxxx&#8221;);<br />
} catch (Exception e) {}<br />
return connection;</p></blockquote>
<p>Và sửa lại như thế này để chạy bình thường:</p>
<blockquote><p>Connection connection = null;<br />
try {<br />
Class.forName(&#8220;org.postgresql.Driver&#8221;);<br />
connection = DriverManager.getConnection(&#8220;jdbc:postgresql://localhost:5432/caxxxx&#8221;,&#8221;postgres&#8221;,&#8221;xxxxxx&#8221;);<br />
} catch (Exception e) {}<br />
return connection;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2009/12/10/l%e1%bb%97i-connect-database-xa-x%c6%b0a-nh%c6%b0ng-gay-l%e1%bb%97i-500/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sử dụng captcha trong Struts</title>
		<link>http://phamcuong.info/2009/11/02/s%e1%bb%ad-d%e1%bb%a5ng-captcha-trong-struts/</link>
		<comments>http://phamcuong.info/2009/11/02/s%e1%bb%ad-d%e1%bb%a5ng-captcha-trong-struts/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 02:59:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[struts]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=489</guid>
		<description><![CDATA[This Java Captcha Example demonstrates you how to develop a captcha Servlet and use in your Struts 2 application. Developing Struts 2 Captcha Application In this section we are going to develop Captcha Servlet and then use the same to validate Struts 2 based web applications. We have developed a Servlet that generates Captcha image. [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000080;">This Java Captcha Example demonstrates you how to develop a captcha Servlet and use in your Struts 2 application.</span></p>
<p><span style="color: #000080;"><span id="more-489"></span><strong>Developing Struts 2 </strong></span><strong><span style="color: #000080;">Captcha </span></strong><span style="color: #000080;"><strong> Application<br />
</strong>In this section we are going to develop Captcha Servlet and then use the same to validate Struts 2 based web applications. We have developed a Servlet that generates Captcha image. </span></p>
<p>Let&#8217;s see how our Captcha <span style="color: #000080;">application works. </span></p>
<p><strong><span style="color: #000080;">Working of the application</span></strong></p>
<ol>
<li><span style="color: #000080;"><strong>captcha.jsp:</strong> This page contains the     captcha image and one text field. </span></li>
<li><span style="color: #000080;">User reads the image text and then enters in the     &#8220;Code&#8221; text field. After entering the value in the text field,     user clicks on the &#8220;<strong>Verify</strong>&#8220;      command button.</span></li>
<li><span style="color: #000080;">Then our Struts 2 action validates the user input     and the session Captcha value.  If user enters the correct image code in the text filed,     then action  forward to the &#8220;<strong>success.jsp</strong>&#8221;     page. Otherwise, it gives an error and go to again the &#8220;<strong>captcha.jsp</strong>&#8220;.</span></li>
</ol>
<p><span style="color: #000080;"><strong>1. Index page<br />
</strong>In the  <strong>index.html</strong> we have added a link to <strong>captcha.jsp.</strong> User can click on this link to go to the captcha form.</span></p>
<table border="0" cellspacing="1" cellpadding="0" width="301" bgcolor="#ffffcc">
<tbody>
<tr>
<td width="295"><span style="color: #000080;">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Capcha Validation&lt;/title&gt;<br />
&lt;style&gt;<br />
a:link{ color:red; text-decoration:underline; }<br />
a:visited{ color:red; text-decoration:underline; }<br />
a:hover{ color:green; text-decoration:none; }<br />
a:active{ color:red; text-decoration:underline; }<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;&lt;td&gt;<strong>&lt;a href=&#8221;captcha.jsp&#8221;&gt;Captcha Application&lt;/a&gt;</strong>&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000080;"><strong>2. Captcha Page </strong><br />
The GUI of the application consists of  Captcha page  (<strong>captcha.jsp</strong>).<br />
The <strong>captcha.jsp</strong> is used to display the valid code and a text box. </span></p>
<table border="0" cellspacing="1" cellpadding="0" width="413" bgcolor="#ffffcc">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code><span style="color: #000080;">&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Capcha Validation&lt;/title&gt;<br />
&lt;style&gt;<br />
.errorMessage {<br />
color: red;<br />
font-size: 0.8em;<br />
}</p>
<p>.label {<br />
color:#000000;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;<br />
&lt;h1&gt;Captcha Validation&lt;/h1&gt;<br />
&lt;s:form action="doCaptcha" method="POST"&gt;<br />
&lt;s:actionerror /&gt;<br />
&lt;img src="Captcha.jpg" border="0"&gt;<br />
&lt;s:textfield label="Code" name="j_captcha_response" size="20" maxlength="10"/&gt;<br />
&lt;s:submit value="Verify" align="center" /&gt;<br />
&lt;/s:form&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></code></td>
<p><!-- end source code --></tr>
</tbody>
</table>
<p><span style="color: #000080;">The code :<br />
<strong>&lt;s:actionerror /&gt;</strong><br />
displays action errors and field validation errors.</span></p>
<p><span style="color: #000080;">The code <strong>&lt;s:form action=&#8221;doLogin&#8221; method=&#8221;POST&#8221;&gt; </strong>generates the html form for the application.</p>
<p>The code :</span></p>
<p><span style="color: #000080;"><strong>&lt;img src=&#8221;Captcha.jpg&#8221; border=&#8221;0&#8243;&gt;</strong><br />
<strong>&lt;s:textfield label=&#8221;Code&#8221; name=&#8221;j_captcha_response&#8221; size=&#8221;20&#8243; maxlength=&#8221;10&#8243;/&gt;<br />
</strong></span></p>
<p><span style="color: #000080;">The submit button is generated through <strong>&lt;s:submit value=&#8221;Verify&#8221; align=&#8221;center&#8221; /&gt;</strong> code.</span></p>
<p><span style="color: #000080;"><strong>3. Servlet Class<br />
</strong>Develop a Servlet class &#8220;<strong>RoseIndiaCaptcha.java</strong>&#8221; to create a Captcha image. Here is the code of <strong> RoseIndiaCaptcha.java</strong> Servlet class:</span></p>
<table border="0" cellspacing="1" cellpadding="0" width="300" bgcolor="#ffffcc">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code> <span style="color: #000080;"><strong>package </strong>com.roseindiaCaptcha.servlet;</p>
<p><strong>import </strong>java.awt.image.BufferedImage;<br />
<strong>import </strong>javax.imageio.ImageIO;<br />
<strong>import </strong>javax.servlet.http.*;<br />
<strong>import </strong>javax.servlet.*;<br />
<strong>import </strong>java.io.*;<br />
<strong>import </strong>java.awt.*;<br />
<strong>import </strong>java.util.*;<br />
<strong>import </strong>java.awt.font.TextAttribute;</p>
<p><strong>public class </strong>RoseIndiaCaptcha <strong>extends </strong>HttpServlet {</p>
<p><strong>private int </strong>height=0;<br />
<strong>private int </strong>width=0;</p>
<p><strong>public static final </strong>String CAPTCHA_KEY = "captcha_key_name";</p>
<p><strong>public void </strong>init(ServletConfig config) <strong>throws </strong>ServletException {<br />
<strong>super</strong>.init(config);<br />
height=Integer.parseInt(getServletConfig().getInitParameter("height"));<br />
width=Integer.parseInt(getServletConfig().getInitParameter("width"));<br />
}</p>
<p><strong>protected void </strong>doGet(HttpServletRequest req, HttpServletResponse response)<br />
<strong>throws </strong>IOException, ServletException {<br />
//Expire response<br />
response.setHeader("Cache-Control", "no-cache");<br />
response.setDateHeader("Expires", 0);<br />
response.setHeader("Pragma", "no-cache");<br />
response.setDateHeader("Max-Age", 0);</p>
<p>BufferedImage image = <strong>new </strong>BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);<br />
Graphics2D graphics2D = image.createGraphics();<br />
Hashtable&lt;TextAttribute, Object&gt; map = <strong>new </strong>Hashtable&lt;TextAttribute, Object&gt;();<br />
Random r = <strong>new </strong>Random();<br />
String token = Long.toString(Math.abs(r.nextLong()), 36);<br />
String ch = token.substring(0,6);<br />
Color c = <strong>new </strong>Color(0.6662f, 0.4569f, 0.3232f);<br />
GradientPaint gp = <strong>new </strong>GradientPaint(30, 30, c, 15, 25, Color.white, <strong>true</strong>);<br />
graphics2D.setPaint(gp);<br />
Font font=<strong>new </strong>Font("Verdana", Font.CENTER_BASELINE , 26);<br />
graphics2D.setFont(font);<br />
graphics2D.drawString(ch,2,20);<br />
graphics2D.dispose();</p>
<p>HttpSession session = req.getSession(<strong>true</strong>);<br />
session.setAttribute(CAPTCHA_KEY,ch);</p>
<p>OutputStream outputStream = response.getOutputStream();<br />
ImageIO.write(image, "jpeg", outputStream);<br />
outputStream.close();</p>
<p>}</p>
<p>}</span></code></td>
<p><!-- end source code --></tr>
</tbody>
</table>
<p><strong><span style="color: #000080;">4.Mapping  for Servlet class in web.xml</span></strong></p>
<table border="0" cellspacing="1" cellpadding="0" width="618" bgcolor="#ffffcc">
<tbody>
<tr>
<td width="612">&lt;servlet&gt;<br />
&lt;servlet-name&gt;Captcha&lt;/servlet-name&gt;<br />
&lt;display-name&gt;Captcha&lt;/display-name&gt;<br />
<strong>&lt;servlet-class&gt;com.roseindiaCaptcha.servlet.RoseIndiaCaptcha&lt;/servlet-class&gt;</strong><br />
&lt;init-param&gt;<br />
&lt;description&gt;passing height&lt;/description&gt;<br />
&lt;param-name&gt;height&lt;/param-name&gt;<br />
&lt;param-value&gt;30&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;description&gt;passing height&lt;/description&gt;<br />
&lt;param-name&gt;width&lt;/param-name&gt;<br />
&lt;param-value&gt;120&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;Captcha&lt;/servlet-name&gt;<br />
<strong>&lt;url-pattern&gt;/Captcha.jpg&lt;/url-pattern&gt;</strong><br />
&lt;/servlet-mapping&gt;</td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #000080;">5.Success page</span></strong></p>
<p><span style="color: #000080;">After successful validation page  transfer to the <strong>&#8220;success.page&#8221;</strong></span></p>
<table border="0" cellspacing="1" cellpadding="0" width="300" bgcolor="#ffffcc">
<tbody>
<tr>
<td><span style="color: #000080;">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Capcha Validation&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;h1&gt;You are Succesfully Validate&lt;/h1&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000080;"><strong>6.Developing Action Class</strong><br />
Now let&#8217;s develop the action class to handle the Captcha validation request. </span></p>
<p><span style="color: #000080;">The code  <strong>String c= (String)session.getAttribute(RoseIndiaCaptcha.CAPTCHA_KEY)</strong> is used to get the Captcha value stored in session and then validate it with the user input. Here is the code of the Action class.</span></p>
<table border="0" cellspacing="1" cellpadding="0" width="300" bgcolor="#ffffcc">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code> <span style="color: #000080;"><strong>package </strong>com.roseindiaCaptcha.action;<br />
<strong>import </strong>com.opensymphony.xwork2.ActionSupport;<br />
<strong>import </strong>java.util.Date;<br />
<strong>import </strong>javax.servlet.http.*;<br />
<strong>import </strong>javax.servlet.*;<br />
<strong>import </strong>com.opensymphony.xwork2.ActionContext;<br />
<strong>import </strong>com.roseindiaCaptcha.servlet.*;</p>
<p><strong>public  class </strong>CaptchaAction  <strong>extends </strong>ActionSupport {<br />
<strong>public </strong>String execute() <strong>throws </strong>Exception {<br />
HttpServletRequest request  = (HttpServletRequest)<br />
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);<br />
Boolean isResponseCorrect = Boolean.FALSE;<br />
javax.servlet.http.HttpSession session = request.getSession();<br />
String parm = request.getParameter("j_captcha_response");<br />
String c= (String)session.getAttribute(RoseIndiaCaptcha.CAPTCHA_KEY) ;<br />
<strong>if</strong>(!parm.equals(c) ){<br />
addActionError("Invalid Code! Please try again!");<br />
<strong>return </strong>ERROR;<br />
}<strong>else</strong>{<br />
<strong>return </strong>SUCCESS;<br />
}<br />
}<br />
}</span></code></td>
<p><!-- end source code --></tr>
</tbody>
</table>
<p><strong><span style="color: #000080;"> </span></strong></p>
<p><span style="color: #000080;"><strong>7.Configuring action mapping (in struts.xml)</strong><br />
Now we will create action mapping in the struts.xml file. Here is the code to be added in the struts.xml:<br />
</span></p>
<div>
<table border="1" cellspacing="0" cellpadding="0" width="400" bgcolor="#ffffcc" bordercolor="#c0c0c0">
<tbody>
<tr>
<td><span style="color: #000080;">&lt;action name=&#8221;doCaptcha&#8221; class=&#8221;com.roseindiaCaptcha.action.CaptchaAction&#8221;&gt;<br />
&lt;result name=&#8221;error&#8221;&gt;captcha.jsp&lt;/result&gt;<br />
&lt;result&gt;success.jsp&lt;/result&gt;<br />
&lt;/action&gt;</span></td>
</tr>
</tbody>
</table>
</div>
<p><span style="color: #000080;">In the above mapping the action &#8220;doCaptcha&#8221; is used to validates the user using action class (CaptchaAction.java).</span></p>
<p><span style="color: #000080;"><strong>Output : </strong></span></p>
<p><img src="http://www.roseindia.net/struts/struts2/captcha/captchaLink.gif" border="1" alt="" width="155" height="44" /><br />
<img src="http://www.roseindia.net/struts/struts2/captcha/captcha.gif" border="1" alt="" width="285" height="152" /></p>
<p><span style="color: #000080;">If invalid code the error message is display.</span></p>
<p><span style="color: #000080;"><img src="http://www.roseindia.net/struts/struts2/captcha/error.gif" border="1" alt="" width="290" height="188" /></span></p>
<p><span style="color: #000080;"><img src="http://www.roseindia.net/struts/struts2/captcha/valid.gif" border="1" alt="" width="285" height="150" /><br />
</span></p>
<p><span style="color: #000080;">After successfully validation message :</span></p>
<p><span style="color: #000080;"><img src="http://www.roseindia.net/struts/struts2/captcha/successmsg.gif" border="1" alt="" width="422" height="47" /></span></p>
<p><span style="color: #000080;"><strong> </strong> <strong><br />
<a href="http://www.roseindia.net/struts/struts2/captcha/roseindiaCaptcha.zip">Download the application</a> </strong></span></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td rowspan="2" width="125" align="center" valign="top">
<table style="border-style: solid; border-color: #d4d5d6; border-width: 0px 0px 0px 1px;" border="0" cellspacing="0" cellpadding="2" width="125">
<tbody>
<tr>
<td align="left" valign="top">
<ul class="categorylinks">
<li id="c7"></li>
</ul>
</td>
</tr>
<tr>
<td align="left" valign="top">
<div class="headers">
<div></div>
</div>
</td>
</tr>
</tbody>
</table>
</td>
<td colspan="2" width="99%" height="380" align="left" valign="top">
<div class="border-1">
<table border="0" cellspacing="0" cellpadding="0" width="800">
<tbody>
<tr>
<td colspan="3" align="left" valign="top" bgcolor="#ccff99">
<strong><span style="font-family: Arial; font-size: small;">Java Captcha in Struts 2 Application</span></strong></td>
</tr>
<tr>
<td colspan="3" align="left" valign="top">
<span style="font-family: Arial; color: #000080; font-size: x-small;">This Java Captcha Example demonstrates you how to develop a captcha Servlet and use in your Struts 2 application.</span></td>
</tr>
<tr>
<td width="336" align="center" valign="middle"><script type="text/javascript">// <![CDATA[
google_ad_client = "pub-0714075272818912";
/* 336x280, created 1/28/09Top-336x280 */
google_ad_slot = "4891982402";
google_ad_width = 336;
google_ad_height = 280;
// ]]&gt;</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script src="http://pagead2.googlesyndication.com/pagead/expansion_embed.js"></script><script src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins style="border: medium none; margin: 0pt; padding: 0pt; display: inline-table; height: 280px; position: relative; visibility: visible; width: 336px;"><ins style="border: medium none; margin: 0pt; padding: 0pt; display: block; height: 280px; position: relative; visibility: visible; width: 336px;"></ins></ins></td>
<td align="left" valign="middle"><script type="text/javascript">// <![CDATA[
google_ad_client = "pub-0714075272818912";
/* Top 336x280, -2- created 10/19/09 */
google_ad_slot = "8054255732";
google_ad_width = 336;
google_ad_height = 280;
// ]]&gt;</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins style="border: medium none; margin: 0pt; padding: 0pt; display: inline-table; height: 280px; position: relative; visibility: visible; width: 336px;"><ins style="border: medium none; margin: 0pt; padding: 0pt; display: block; height: 280px; position: relative; visibility: visible; width: 336px;"></ins></ins></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<td width="90%" valign="top"><!-- google_ad_section_start --> <!-- Top --> <!-- Left --></p>
<div>
<table border="0" width="98%">
<tbody>
<tr>
<td width="100%" align="left">
<h1><span style="color: #000080;">Java Captcha in Struts 2	 Application</span></h1>
<p align="center">
<div class="adsBelowHeadingNormal"><script type="text/javascript">// <![CDATA[
google_ad_client = "pub-0714075272818912";
/* 336x280, created 2/11/08 LeftNewAds */
google_ad_slot = "1009602866";
google_ad_width = 336;
google_ad_height = 280;
// ]]&gt;</script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script type="text/javascript">// <![CDATA[
google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);
// ]]&gt;</script><ins style="border: medium none; margin: 0pt; padding: 0pt; display: inline-table; height: 280px; position: relative; visibility: visible; width: 336px;"><ins style="border: medium none; margin: 0pt; padding: 0pt; display: block; height: 280px; position: relative; visibility: visible; width: 336px;"></ins></ins></div>
<p><a href="http://www.roseindia.net/struts/struts2/captcha/java-captcha-example.shtml"><img src="http://www.roseindia.net/images/previous.gif" border="0" alt="" /></a> <a href="http://www.roseindia.net/struts/struts2/captcha/index.shtml"><img src="http://www.roseindia.net/images/bt_home.gif" border="0" alt="" /></a> <a href="http://www.roseindia.net/struts/struts2/captcha/java-captcha-example.shtml"><img src="http://www.roseindia.net/images/next.gif" border="0" alt="" /></a><span style="color: #000080;">This Java Captcha Example demonstrates you how to develop a captcha Servlet and use in your Struts 2 application.</span></p>
<p><span style="color: #000080;"><strong>Developing Struts 2 </strong></span><strong><span style="color: #000080;">Captcha </span></strong><span style="color: #000080;"><strong> Application<br />
</strong>In this section we are going to develop Captcha Servlet and then use the same to validate Struts 2 based web applications. We have developed a Servlet that generates Captcha image. </span></p>
<p>Let&#8217;s see how our Captcha <span style="color: #000080;">application works. </span></p>
<p><strong><span style="color: #000080;">Working of the application</span></strong></p>
<ol>
<li><span style="color: #000080;"><strong>captcha.jsp:</strong> This page contains the     captcha image and one text field. </span></li>
<li><span style="color: #000080;">User reads the image text and then enters in the     &#8220;Code&#8221; text field. After entering the value in the text field,     user clicks on the &#8220;<strong>Verify</strong>&#8220;      command button.</span></li>
<li><span style="color: #000080;">Then our Struts 2 action validates the user input     and the session Captcha value.  If user enters the correct image code in the text filed,     then action  forward to the &#8220;<strong>success.jsp</strong>&#8221;     page. Otherwise, it gives an error and go to again the &#8220;<strong>captcha.jsp</strong>&#8220;.</span></li>
</ol>
<p><span style="color: #000080;"><strong>1. Index page<br />
</strong>In the  <strong>index.html</strong> we have added a link to <strong>captcha.jsp.</strong> User can click on this link to go to the captcha form.</span></p>
<table border="0" cellspacing="1" cellpadding="0" width="301" bgcolor="#ffffcc">
<tbody>
<tr>
<td width="295"><span style="color: #000080;">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Capcha Validation&lt;/title&gt;<br />
&lt;style&gt;<br />
a:link{ color:red; text-decoration:underline; }<br />
a:visited{ color:red; text-decoration:underline; }<br />
a:hover{ color:green; text-decoration:none; }<br />
a:active{ color:red; text-decoration:underline; }<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;&lt;td&gt;<strong>&lt;a href=&#8221;captcha.jsp&#8221;&gt;Captcha Application&lt;/a&gt;</strong>&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000080;"><strong>2. Captcha Page </strong><br />
The GUI of the application consists of  Captcha page  (<strong>captcha.jsp</strong>).<br />
The <strong>captcha.jsp</strong> is used to display the valid code and a text box. </span></p>
<table border="0" cellspacing="1" cellpadding="0" width="413" bgcolor="#ffffcc">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code><span style="color: #000080;">&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Capcha Validation&lt;/title&gt;<br />
&lt;style&gt;<br />
.errorMessage {<br />
color: red;<br />
font-size: 0.8em;<br />
}</p>
<p>.label {<br />
color:#000000;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table&gt;<br />
&lt;tr&gt;<br />
&lt;td&gt;<br />
&lt;h1&gt;Captcha Validation&lt;/h1&gt;<br />
&lt;s:form action="doCaptcha" method="POST"&gt;<br />
&lt;s:actionerror /&gt;<br />
&lt;img src="Captcha.jpg" border="0"&gt;<br />
&lt;s:textfield label="Code" name="j_captcha_response" size="20" maxlength="10"/&gt;<br />
&lt;s:submit value="Verify" align="center" /&gt;<br />
&lt;/s:form&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></code></td>
<p><!-- end source code --></tr>
</tbody>
</table>
<p><span style="color: #000080;">The code :<br />
<strong>&lt;s:actionerror /&gt;</strong><br />
displays action errors and field validation errors.</span></p>
<p><span style="color: #000080;">The code <strong>&lt;s:form action=&#8221;doLogin&#8221; method=&#8221;POST&#8221;&gt; </strong>generates the html form for the application.</p>
<p>The code :</span></p>
<p><span style="color: #000080;"><strong>&lt;img src=&#8221;Captcha.jpg&#8221; border=&#8221;0&#8243;&gt;</strong><br />
<strong>&lt;s:textfield label=&#8221;Code&#8221; name=&#8221;j_captcha_response&#8221; size=&#8221;20&#8243; maxlength=&#8221;10&#8243;/&gt;<br />
</strong></span></p>
<p><span style="color: #000080;">The submit button is generated through <strong>&lt;s:submit value=&#8221;Verify&#8221; align=&#8221;center&#8221; /&gt;</strong> code.</span></p>
<p><span style="color: #000080;"><strong>3. Servlet Class<br />
</strong>Develop a Servlet class &#8220;<strong>RoseIndiaCaptcha.java</strong>&#8221; to create a Captcha image. Here is the code of <strong> RoseIndiaCaptcha.java</strong> Servlet class:</span></p>
<table border="0" cellspacing="1" cellpadding="0" width="300" bgcolor="#ffffcc">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code> <span style="color: #000080;"><strong>package </strong>com.roseindiaCaptcha.servlet;</p>
<p><strong>import </strong>java.awt.image.BufferedImage;<br />
<strong>import </strong>javax.imageio.ImageIO;<br />
<strong>import </strong>javax.servlet.http.*;<br />
<strong>import </strong>javax.servlet.*;<br />
<strong>import </strong>java.io.*;<br />
<strong>import </strong>java.awt.*;<br />
<strong>import </strong>java.util.*;<br />
<strong>import </strong>java.awt.font.TextAttribute;</p>
<p><strong>public class </strong>RoseIndiaCaptcha <strong>extends </strong>HttpServlet {</p>
<p><strong>private int </strong>height=0;<br />
<strong>private int </strong>width=0;</p>
<p><strong>public static final </strong>String CAPTCHA_KEY = "captcha_key_name";</p>
<p><strong>public void </strong>init(ServletConfig config) <strong>throws </strong>ServletException {<br />
<strong>super</strong>.init(config);<br />
height=Integer.parseInt(getServletConfig().getInitParameter("height"));<br />
width=Integer.parseInt(getServletConfig().getInitParameter("width"));<br />
}</p>
<p><strong>protected void </strong>doGet(HttpServletRequest req, HttpServletResponse response)<br />
<strong>throws </strong>IOException, ServletException {<br />
//Expire response<br />
response.setHeader("Cache-Control", "no-cache");<br />
response.setDateHeader("Expires", 0);<br />
response.setHeader("Pragma", "no-cache");<br />
response.setDateHeader("Max-Age", 0);</p>
<p>BufferedImage image = <strong>new </strong>BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);<br />
Graphics2D graphics2D = image.createGraphics();<br />
Hashtable&lt;TextAttribute, Object&gt; map = <strong>new </strong>Hashtable&lt;TextAttribute, Object&gt;();<br />
Random r = <strong>new </strong>Random();<br />
String token = Long.toString(Math.abs(r.nextLong()), 36);<br />
String ch = token.substring(0,6);<br />
Color c = <strong>new </strong>Color(0.6662f, 0.4569f, 0.3232f);<br />
GradientPaint gp = <strong>new </strong>GradientPaint(30, 30, c, 15, 25, Color.white, <strong>true</strong>);<br />
graphics2D.setPaint(gp);<br />
Font font=<strong>new </strong>Font("Verdana", Font.CENTER_BASELINE , 26);<br />
graphics2D.setFont(font);<br />
graphics2D.drawString(ch,2,20);<br />
graphics2D.dispose();</p>
<p>HttpSession session = req.getSession(<strong>true</strong>);<br />
session.setAttribute(CAPTCHA_KEY,ch);</p>
<p>OutputStream outputStream = response.getOutputStream();<br />
ImageIO.write(image, "jpeg", outputStream);<br />
outputStream.close();</p>
<p>}</p>
<p>}</span></code></td>
<p><!-- end source code --></tr>
</tbody>
</table>
<p><strong><span style="color: #000080;">4.Mapping  for Servlet class in web.xml</span></strong></p>
<table border="0" cellspacing="1" cellpadding="0" width="618" bgcolor="#ffffcc">
<tbody>
<tr>
<td width="612">&lt;servlet&gt;<br />
&lt;servlet-name&gt;Captcha&lt;/servlet-name&gt;<br />
&lt;display-name&gt;Captcha&lt;/display-name&gt;<br />
<strong>&lt;servlet-class&gt;com.roseindiaCaptcha.servlet.RoseIndiaCaptcha&lt;/servlet-class&gt;</strong><br />
&lt;init-param&gt;<br />
&lt;description&gt;passing height&lt;/description&gt;<br />
&lt;param-name&gt;height&lt;/param-name&gt;<br />
&lt;param-value&gt;30&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;description&gt;passing height&lt;/description&gt;<br />
&lt;param-name&gt;width&lt;/param-name&gt;<br />
&lt;param-value&gt;120&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;Captcha&lt;/servlet-name&gt;<br />
<strong>&lt;url-pattern&gt;/Captcha.jpg&lt;/url-pattern&gt;</strong><br />
&lt;/servlet-mapping&gt;</td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #000080;">5.Success page</span></strong></p>
<p><span style="color: #000080;">After successful validation page  transfer to the <strong>&#8220;success.page&#8221;</strong></span></p>
<table border="0" cellspacing="1" cellpadding="0" width="300" bgcolor="#ffffcc">
<tbody>
<tr>
<td><span style="color: #000080;">&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Capcha Validation&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;h1&gt;You are Succesfully Validate&lt;/h1&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</span></td>
</tr>
</tbody>
</table>
<p><span style="color: #000080;"><strong>6.Developing Action Class</strong><br />
Now let&#8217;s develop the action class to handle the Captcha validation request. </span></p>
<p><span style="color: #000080;">The code  <strong>String c= (String)session.getAttribute(RoseIndiaCaptcha.CAPTCHA_KEY)</strong> is used to get the Captcha value stored in session and then validate it with the user input. Here is the code of the Action class.</span></p>
<table border="0" cellspacing="1" cellpadding="0" width="300" bgcolor="#ffffcc">
<tbody>
<tr><!-- start source code --></p>
<td align="left" valign="top"><code> <span style="color: #000080;"><strong>package </strong>com.roseindiaCaptcha.action;<br />
<strong>import </strong>com.opensymphony.xwork2.ActionSupport;<br />
<strong>import </strong>java.util.Date;<br />
<strong>import </strong>javax.servlet.http.*;<br />
<strong>import </strong>javax.servlet.*;<br />
<strong>import </strong>com.opensymphony.xwork2.ActionContext;<br />
<strong>import </strong>com.roseindiaCaptcha.servlet.*;</p>
<p><strong>public  class </strong>CaptchaAction  <strong>extends </strong>ActionSupport {<br />
<strong>public </strong>String execute() <strong>throws </strong>Exception {<br />
HttpServletRequest request  = (HttpServletRequest)<br />
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);<br />
Boolean isResponseCorrect = Boolean.FALSE;<br />
javax.servlet.http.HttpSession session = request.getSession();<br />
String parm = request.getParameter("j_captcha_response");<br />
String c= (String)session.getAttribute(RoseIndiaCaptcha.CAPTCHA_KEY) ;<br />
<strong>if</strong>(!parm.equals(c) ){<br />
addActionError("Invalid Code! Please try again!");<br />
<strong>return </strong>ERROR;<br />
}<strong>else</strong>{<br />
<strong>return </strong>SUCCESS;<br />
}<br />
}<br />
}</span></code></td>
<p><!-- end source code --></tr>
</tbody>
</table>
<p><strong><span style="color: #000080;"> </span></strong></p>
<p><span style="color: #000080;"><strong>7.Configuring action mapping (in struts.xml)</strong><br />
Now we will create action mapping in the struts.xml file. Here is the code to be added in the struts.xml:<br />
</span></p>
<div>
<table border="1" cellspacing="0" cellpadding="0" width="400" bgcolor="#ffffcc" bordercolor="#c0c0c0">
<tbody>
<tr>
<td><span style="color: #000080;">&lt;action name=&#8221;doCaptcha&#8221; class=&#8221;com.roseindiaCaptcha.action.CaptchaAction&#8221;&gt;<br />
&lt;result name=&#8221;error&#8221;&gt;captcha.jsp&lt;/result&gt;<br />
&lt;result&gt;success.jsp&lt;/result&gt;<br />
&lt;/action&gt;</span></td>
</tr>
</tbody>
</table>
</div>
<p><span style="color: #000080;">In the above mapping the action &#8220;doCaptcha&#8221; is used to validates the user using action class (CaptchaAction.java).</span></p>
<p><span style="color: #000080;"><strong>Output : </strong></span></p>
<p><img src="http://www.roseindia.net/struts/struts2/captcha/captchaLink.gif" border="1" alt="" width="155" height="44" /><br />
<img src="http://www.roseindia.net/struts/struts2/captcha/captcha.gif" border="1" alt="" width="285" height="152" /></p>
<p><span style="color: #000080;">If invalid code the error message is display.</span></p>
<p><span style="color: #000080;"><img src="http://www.roseindia.net/struts/struts2/captcha/error.gif" border="1" alt="" width="290" height="188" /></span></p>
<p><span style="color: #000080;"><img src="http://www.roseindia.net/struts/struts2/captcha/valid.gif" border="1" alt="" width="285" height="150" /><br />
</span></p>
<p><span style="color: #000080;">After successfully validation message :</span></p>
<p><span style="color: #000080;"><img src="http://www.roseindia.net/struts/struts2/captcha/successmsg.gif" border="1" alt="" width="422" height="47" /></span></p>
<p><span style="color: #000080;"><strong> </strong> <strong><br />
<a href="http://www.roseindia.net/struts/struts2/captcha/roseindiaCaptcha.zip">Download the application</a> </strong></span></td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</div>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2009/11/02/s%e1%bb%ad-d%e1%bb%a5ng-captcha-trong-struts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java</title>
		<link>http://phamcuong.info/2009/11/02/captcha-trong-java/</link>
		<comments>http://phamcuong.info/2009/11/02/captcha-trong-java/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 02:45:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[captcha]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=486</guid>
		<description><![CDATA[Hệ thống check security để tránh tình trạng bot spam.Lưu ý quan trọng Vì ví dụ mẫu này sử dụng phiên bản BotDetect CAPTCHA được hiện thực dưới dạng COM component, cả máy chủ và máy lập trình của bạn phải sử dụng hệ điều hành họ Windows. Hiện tại, chúng tôi chưa hỗ trợ [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Hệ thống check security để tránh tình trạng bot spam.<span id="more-486"></span><strong>Lưu ý quan trọng</strong></p>
<p>Vì ví dụ mẫu này sử dụng phiên bản BotDetect CAPTCHA được hiện thực dưới dạng COM component, cả máy chủ và máy lập trình của bạn phải sử dụng hệ điều hành họ Windows. Hiện tại, chúng tôi chưa hỗ trợ trang Java chạy trên các hệ điều hành khác.</p></div>
<h2>Yêu cầu hệ thống</h2>
<ul>
<li>JDK 1.6.0_07 – <a href="http://java.sun.com/" target="_blank">http://java.sun.com</a></li>
<li>Eclipse 3.4 IDE dành cho lập trình viên Java EE – <a href="http://www.eclipse.org/downloads/" target="_blank">http://www.eclipse.org/downloads/</a></li>
<li>Tomcat 6.0.14 – <a href="http://jakarta.apache.org/tomcat" target="_blank">http://jakarta.apache.org/tomcat</a></li>
<li>JACOB – Java COM Bridge – <a href="http://sourceforge.net/projects/jacob-project" target="_blank"> http://sourceforge.net/projects/jacob-project</a></li>
<li>BotDetect 2.0 CAPTCHA – <a title="Tải về bản dùng thử miễn phí của Lanapsoft BotDetect CAPTCHA" href="http://vi.captcha.biz/t%E1%BA%A3i-captcha.html?version=asp" target="_blank">dùng thử miễn phí BotDetect CAPTCHA</a></li>
</ul>
<p>Các phiên bản khác cũng có thể dùng tốt nhưng chúng tôi đã sử dụng các phiên bản trên trong ví dụ này. Giải nén và cài đặt vào thư mục tuỳ chọn.</p>
<h2>Tạo dự án CAPTCHA mới dùng Java</h2>
<p>Tạo mới dự án web động bằng cách click &#8220;File\New\Project&#8221;</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot006.jpg',500,500); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot006_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 6" /></a></p>
<p>Trong &#8220;Project name&#8221;, gõ &#8220;captchaWeb&#8221;, chọn &#8220;Apache Tomcat v6.0&#8243; trong &#8220;Target Runtime&#8221; và click &#8220;Finish&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot007.jpg',554,577); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot007_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 7" /></a></p>
<p>Tại dấu đợi lệnh click &#8220;Yes&#8221; để chuyển sang Java EE</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot008.jpg',441,150); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot008_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 8" /></a></p>
<p>Trong Project Explorer tìm tới &#8220;Java Resources: src&#8221;, click phải vào nó và chọn &#8220;New\Package&#8221;. Trong trường &#8220;Name&#8221;, gõ &#8220;org.lanapsoft.captcha&#8221; và click &#8220;Finish&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot009.jpg',438,408); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot009_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 9" /></a></p>
<p>click phải trên gói mới và chọn &#8220;New\Class&#8221;. Trong trường &#8220;Name&#8221; gõ &#8220;CaptchaServlet&#8221; và click &#8220;Finish&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot010.jpg',495,592); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot010_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 10" /></a></p>
<p>Cắt dán doạn mã sau:</p>
<pre>package org.lanapsoft.captcha;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.SafeArray;
import com.jacob.com.Variant;

public class CaptchaServlet extends HttpServlet {

  public void service(HttpServletRequest request, HttpServletResponse
    response) throws ServletException, IOException {

    ActiveXComponent activeXComponent = null;

    String command = null;
    String[] params = null;
    String queryString = (String) request.getQueryString();

    if (queryString != null) {
      params = queryString.split("=");
      command = params[0];
    }

    HttpSession session = request.getSession(true);
    activeXComponent = (ActiveXComponent)
      session.getAttribute("captchaComponent");

    if (activeXComponent == null) {
      activeXComponent = new ActiveXComponent("Lanap.BotDetect");
      session.setAttribute("captchaComponent", activeXComponent);
    }

    if ("CreateImage".equals(command)) {
      activeXComponent.setProperty("CodeLength", 5);
      activeXComponent.setProperty("Format", "Jpeg");
      activeXComponent.setProperty("ImageWidth", 300);
      activeXComponent.setProperty("ImageHeight", 100);

      Variant createImage = activeXComponent.invoke("CreateImage");

      SafeArray createImageSafeArray = createImage.toSafeArray();
      byte createImageByteArray[] = createImageSafeArray.toByteArray();

      Variant generatedValue = activeXComponent.invoke("GetValue");
      session.setAttribute("generatedValue", generatedValue);

      Variant generatedHashValue =
        activeXComponent.invoke("GetHashValue");
      session.setAttribute("generatedHashValue", generatedHashValue);

      ServletOutputStream servletOutputStream = response
        .getOutputStream();
      servletOutputStream.write(createImageByteArray);
      servletOutputStream.flush();
      servletOutputStream.close();

    } else if ("CreateSound".equals(command)) {
      Variant generatedValue =
        (Variant)session.getAttribute("generatedValue");
      Variant createSound =
        activeXComponent.invoke("CreateSoundFromCode",
          generatedValue);

      SafeArray createImageSafeArray = createSound.toSafeArray();
      byte createImageByteArray[] = createImageSafeArray.toByteArray();

      ServletOutputStream servletOutputStream = response
        .getOutputStream();
      servletOutputStream.write(createImageByteArray);
      servletOutputStream.flush();
      servletOutputStream.close();

    } else if ("userCode".equals(command)) {
      String userCodeParam = params[1];

      Variant userCode = new Variant();
      userCode.putString(userCodeParam);

      Variant generatedHashValue = (Variant)
        session.getAttribute("generatedHashValue");
      Variant validate = activeXComponent.invoke("Validate", userCode,
        generatedHashValue);

      boolean success = validate.getBoolean();

      if (success) {
        response.sendRedirect("/captchaWeb/success.htm");
      } else {
        response.sendRedirect("/captchaWeb/failure.htm");
      }
    }
  }
}</pre>
<p>Để loại bỏ lỗi biên dịch, click phải vào dự án và chọn &#8220;Properties&#8221;. Chọn &#8220;Java Build Path&#8221; và click trên &#8220;Add Library&#8230;&#8221;</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot011.jpg',666,536); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot011_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 11" /></a></p>
<p>Trên màn hình tiếp theo chọn &#8220;User Library&#8221; và click &#8220;Next&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot012.jpg',438,443); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot012_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 12" /></a></p>
<p>Click &#8220;User Libraries&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot013.jpg',438,443); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot013_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 13" /></a></p>
<p>Click &#8220;New&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot014.jpg',626,572); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot014_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 14" /></a></p>
<p>Gõ &#8220;jacob&#8221; cho &#8220;User library name&#8221; và Nhấn &#8220;OK&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot015.jpg',262,178); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot015.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 15" /></a></p>
<p>Click &#8220;Add jars&#8221;, tìm tới thư mục &#8220;Jacob&#8221; và chọn &#8220;jacob.jar&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot016.jpg',626,572); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot016_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 16" /></a></p>
<p>Click &#8220;OK&#8221;, &#8220;Finish&#8221; và &#8220;OK&#8221;. Sẽ không có lỗi nào trong dự án.</p>
<p>Trong Project Explorer, tìm tới &#8220;WebContent\WEB-INF&#8221;, mở &#8220;web.xml&#8221; và chuyển qua tab &#8220;Source&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot017.jpg',942,397); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot017_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 17" /></a></p>
<p>Cắt dán đoạn mã sau:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app id="WebApp_ID" version="2.4"
  xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;
  &lt;display-name&gt;captchaWeb&lt;/display-name&gt;
  &lt;welcome-file-list&gt;
    &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;
  &lt;/welcome-file-list&gt;

  &lt;servlet&gt;
    &lt;servlet-name&gt;captchaWeb&lt;/servlet-name&gt;
    &lt;servlet-class&gt;org.lanapsoft.captcha.CaptchaServlet&lt;/servlet-class&gt;
    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
  &lt;/servlet&gt;

  &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;captchaWeb&lt;/servlet-name&gt;
    &lt;url-pattern&gt;/captcha/*&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;
&lt;/web-app&gt;</pre>
<p>Trong Project Explorer, click phải vào &#8220;WebContent&#8221; và chọn &#8220;New\File&#8221;. Gõ vào &#8220;index.htm&#8221; và click &#8220;Finish&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot018.jpg',438,571); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot018_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 18" /></a></p>
<p>Lặp lại các bước và tạo file &#8220;success.htm&#8221; và &#8220;failure.htm&#8221;.</p>
<p>Cắt dán đoạn mã sau:</p>
<h3>index.htm</h3>
<pre>&lt;html&gt;
&lt;body&gt;
  &lt;form name="searchForm" method="get" action="/captchaWeb/captcha"&gt;
    &lt;table&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;img src="/captchaWeb/captcha?CreateImage" /&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;b&gt;Sound:&lt;/b&gt;
          &lt;a href="/captchaWeb/captcha?CreateSound"&gt;
            &lt;img src="speaker.gif" alt="Speak the code" /&gt;
          &lt;/a&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td colspan="2" align="right"&gt;
          &lt;input type="text" name="userCode" /&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td colspan="2" align="right"&gt;
          &lt;input type="submit" value="Submit" /&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
  &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h3>success.htm</h3>
<pre>&lt;html&gt;
  &lt;h1&gt;success&lt;/h1&gt;
&lt;/html&gt;</pre>
<h3>failiure.htm</h3>
<pre>&lt;html&gt;
  &lt;h1&gt;failure&lt;/h1&gt;
&lt;/html&gt;</pre>
<p>Tìm tới &#8220;WebContent\WEB-INF\lib&#8221; trong Project Explorer và dán file &#8220;jacob-1.14.3-x86.dll&#8221;.</p>
<p>click phải trên dự án &#8220;captchaWeb&#8221;, chọn &#8220;Properties&#8221;, và &#8220;Java EE Module Dependencies&#8221; và check thư viện &#8220;jacob&#8221;. Nhấn &#8220;OK&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot019.jpg',641,536); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot019_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 19" /></a></p>
<p>Tìm tới &#8220;Window\Show View&#8221; và chọn &#8220;Servers&#8221;. Trong màn hình &#8220;Servers&#8221;, click phải và chọn &#8220;New\Server&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot020.jpg',1077,479); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot020_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 20" /></a></p>
<p>chọn &#8220;Tomcat v6.0 Server&#8221; và click &#8220;Next&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot021.jpg',498,554); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot021_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 21" /></a></p>
<p>Trên mục &#8220;Add và Remove Projects&#8221;, chọn &#8220;captchaWeb&#8221; và click &#8220;Add&#8221;, rồi &#8220;Finish&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot022.jpg',498,554); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot022_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 22" /></a></p>
<p>Trong &#8220;Servers&#8221;, click phải trên máy chủ, chọn &#8220;Start&#8221;. Tìm tới &#8220;Run\Run Configurations&#8221;, chọn &#8220;Tomcat v6.0 Server at localhost&#8221; và trên tab &#8220;Arguments&#8221;, thêm VM argument <span>-Djava.library.path=“location_of_your_workspace\ captchaWeb\WebContent\WEB-INF\lib&#8221;</span>. Click &#8220;Apply&#8221; và &#8220;Close&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot023.jpg',851,640); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot023_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 23" /></a></p>
<p>Khởi động lại máy chủ, mở trình duyệt và gõ URL http://localhost:8080/captchaWeb/index.htm.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot024.jpg',486,284); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot024_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 24" /></a></p>
<p>Nếu bạn nhập đúng giá trị, bạn sẽ được chuyển tới success.htm</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot025.jpg',486,249); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot025_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 25" /></a></p>
<p>Ngược lại, bạn sẽ được chuyển tới failure.htm</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot026.jpg',487,221); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot026_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 26" /></a></p>
<p><a title="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#top">[lên đầu trang]</a></p>
<h2>Thiết lập môi trường Java</h2>
<p>Nếu bạn không có Java EE Developer Tools được cài đặt trong Eclipse, tìm tới Help\Software Updates&#8230; trong tab &#8220;Available Software&#8221; chọn &#8220;Java EE Developer Tools&#8221; và click &#8220;Install&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot001.jpg',856,731); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot001_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 1" /></a></p>
<p>Trong Eclipse, tìm tới &#8220;Window\Preferences&#8221; và &#8220;Java\Installed JREs&#8221; để chọn JRE.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot002.jpg',680,536); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot002_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 2" /></a></p>
<p>Nếu chưa có JRE, click &#8220;Add&#8230;&#8221; và tìm tới thư mục của nó.</p>
<p>Dưới &#8220;Server\Runtime Environments&#8221; click &#8220;Add&#8230;&#8221;</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot003.jpg',626,536); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot003_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 3" /></a></p>
<p>chọn &#8220;Apache Tomcat v6.0&#8243; và click &#8220;Next&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot004.jpg',438,526); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot004_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 4" /></a></p>
<p>Click &#8220;Browse&#8221; để tìm tới thư mục Tomcat và click &#8220;Finish&#8221; và &#8220;OK&#8221;.</p>
<p><a title="click to enlarge" onclick="newwindow('http://captcha.biz/images/help/java/screenshot005.jpg',438,526); return false;" href="http://vi.captcha.biz/t%C3%A0i-li%E1%BB%87u/java/captcha-java.html#"> <img src="http://captcha.biz/images/help/java/screenshot005_t.jpg" alt="Hướng dẫn sử dụng BotDetect CAPTCHA để bảo vệ trang Java: hình 5" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2009/11/02/captcha-trong-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sử dụng Struts trong java</title>
		<link>http://phamcuong.info/2009/11/01/s%e1%bb%ad-d%e1%bb%a5ng-struts-trong-java/</link>
		<comments>http://phamcuong.info/2009/11/01/s%e1%bb%ad-d%e1%bb%a5ng-struts-trong-java/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 01:18:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[struts]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=478</guid>
		<description><![CDATA[Cách để làm việc nhẹ nhàng hơn với nhập liệu trong dịch vụ web của JSP. Thư viện: •Tải về từ địa chỉ sau: http://www.mediafire.com/download.php?izk3yht5nyo Bao gồm (tối thiểu để chạy struts): Cách cài đặt: file struts &#60;!DOCTYPE struts PUBLIC &#8220;-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&#8221; &#8220;http://struts.apache.org/dtds/struts-2.0.dtd&#8221;&#62; &#60;struts&#62; &#60;package name=&#8221;default&#8221; extends=&#8221;struts-default&#8221;&#62; &#60;action name=&#8221;HelloWorld&#8221;&#62; &#60;result name=&#8221;SUCCESS&#8221;&#62;/success.jsp&#60;/result&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Cách để làm việc nhẹ nhàng hơn với nhập liệu trong dịch vụ web của JSP.<span id="more-478"></span></p>
<p><strong>Thư viện:</strong></p>
<p>•Tải về từ địa chỉ sau:</p>
<p>http://www.mediafire.com/download.php?izk3yht5nyo</p>
<p>Bao gồm (tối thiểu để chạy struts):</p>
<p><img src="http://i458.photobucket.com/albums/qq304/camovie/struts.jpg" border="0" alt="Photobucket" /></p>
<blockquote><p><strong>Cách cài đặt: file struts</strong></p>
<p>&lt;!DOCTYPE struts PUBLIC</p>
<p>&#8220;-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&#8221;</p>
<p>&#8220;http://struts.apache.org/dtds/struts-2.0.dtd&#8221;&gt;</p>
<p>&lt;struts&gt;</p>
<p>&lt;package name=&#8221;default&#8221; extends=&#8221;struts-default&#8221;&gt;</p>
<p>&lt;action name=&#8221;HelloWorld&#8221;&gt;</p>
<p>&lt;result name=&#8221;SUCCESS&#8221;&gt;/success.jsp&lt;/result&gt;</p>
<p>&lt;/action&gt;</p>
<p>&lt;/package&gt;</p>
<p>&lt;/struts&gt;</p></blockquote>
<p>File này nằm trong thư mục gốc của thư mục src ( thư mục chứa file java)</p>
<p><strong>Cách cài đặt</strong>: thêm vào file web.xml</p>
<p>&lt;filter&gt;</p>
<p>&lt;filter-name&gt;struts2&lt;/filter-name&gt;</p>
<p>&lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt;</p>
<p>&lt;/filter&gt;</p>
<p>&lt;filter-mapping&gt;</p>
<p>&lt;filter-name&gt;struts2&lt;/filter-name&gt;</p>
<p>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</p>
<p>&lt;/filter-mapping&gt;</p>
<p><strong>Cách sử dụng: form struts</strong></p>
<p>Khai báo taglib như thẻ c (jstl)</p>
<p>&lt;%@taglib uri=&#8221;/struts-tags&#8221; prefix=&#8221;s&#8221; %&gt;</p>
<p>Ví dụ:</p>
<p>&lt;s:form action=&#8221;HelloWorld&#8221; &gt;</p>
<p>&lt;s:textfield name=&#8221;userName&#8221; label=&#8221;User Name&#8221; /&gt;</p>
<p>&lt;s:submit /&gt;</p>
<p>&lt;/s:form&gt;</p>
<p>Có thể kô sử dụng taglib, nhưng trong form, thẻ action thì bắt buộc tên action có thêm đuôi .action</p>
<p>Ví dụ:</p>
<p>Thay &lt;form action=“Hello” … &gt;</p>
<p>Thành &lt;form action=“Hello.action” …&gt;</p>
<p>Cách sử dụng: lớp action</p>
<p>Tạo mới lớp java bình thường: Biến nhận vào phải giống với name trong input ở thẻ form.</p>
<p>Biến phải có đầy đủ getter và setter. Chỉ được thao tác với biến qua getter và setter.</p>
<p>Ví dụ:</p>
<p>Biến String name;</p>
<p>Chỉ được gọi getName() kô được dùng name</p>
<p>Hiện thực phương thức:</p>
<p>public String execute() {};</p>
<p>Sẽ viết sử lý của lớp action trong đây.</p>
<p>Trả về có 2 mặc định là:</p>
<p><span style="color: #0000ff;">Return SUCCESS</span>; (nếu đúng)</p>
<p><span style="color: #ff0000;">Return INPUT;</span> (nếu có sai sót)</p>
<p><strong>Cấu hình: file struts</strong></p>
<p>Mỗi action đều fải khai báo với file struts</p>
<p>Thêm vào:</p>
<p>&lt;action name=&#8221;HelloWorld&#8221;&gt;</p>
<p>&lt;result name=&#8221;SUCCESS&#8221;&gt;/success.jsp&lt;/result&gt;</p>
<p>&lt;/action&gt;</p>
<p>Tương ứng với trả về trong file action thì sẽ trỏ địa chỉ trang trả về.</p>
<p>Xem ví dụ ở: http://www.vaannila.com/struts-2/struts-2-example/struts-2-example.html</p>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2009/11/01/s%e1%bb%ad-d%e1%bb%a5ng-struts-trong-java/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Upload File Lên Server</title>
		<link>http://phamcuong.info/2009/06/04/upload-file-len-server/</link>
		<comments>http://phamcuong.info/2009/06/04/upload-file-len-server/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 05:05:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=177</guid>
		<description><![CDATA[TẠO FORM ĐỂ UPLOAD FILE Form để upload file cần thoã mãn các điều kiện sau: * method là POST * enctype là multipart/form-data Mã HTML của form sẽ từa tựa như sau: &#60;form method=&#8221;POST&#8221; enctype=&#8221;multipart/form-data&#8221; action=&#8221;process_upload.php&#8221;&#62; &#60;input type=&#8221;hidden&#8221; name=&#8221;MAX_FILE_SIZE&#8221; value=&#8221;30000&#8243;&#62; &#60;input type=&#8221;file&#8221; name=&#8221;file_upload&#8221; size=&#8221;20&#8243;&#62; &#60;input type=&#8221;submit&#8221; value=&#8221;Upload&#8221;&#62; &#60;/form&#62; Đoạn code trên sẽ tạo 1 [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana; color: black;"><strong>TẠO FORM ĐỂ UPLOAD FILE</strong></span></p>
<p><span id="more-177"></span></p>
<p>Form để upload file cần thoã mãn các điều kiện sau:</p>
<p>* method là POST<br />
* enctype là multipart/form-data</p>
<p>Mã HTML của form sẽ từa tựa như sau:</p>
<p>&lt;form method=&#8221;POST&#8221; enctype=&#8221;multipart/form-data&#8221; action=&#8221;process_upload.php&#8221;&gt;<br />
&lt;input type=&#8221;hidden&#8221; name=&#8221;MAX_FILE_SIZE&#8221; value=&#8221;30000&#8243;&gt;<br />
&lt;input type=&#8221;file&#8221; name=&#8221;file_upload&#8221; size=&#8221;20&#8243;&gt;<br />
&lt;input type=&#8221;submit&#8221; value=&#8221;Upload&#8221;&gt;<br />
&lt;/form&gt;</p>
<p>Đoạn code trên sẽ tạo 1 form với 1 nút Browse&#8230; để ban chọn file cần upload, và 1 nút Upload để bạn submit form. Form sẽ được submit tới file process_upload.php nằm cùng thư mục với file chứa form.</p>
<p>Một số browser support MAX_FILE_SIZE sẽ kiểm tra dung lượng file trước khi form được submit, tuy nhiên không phải browser nào cũng vậy. Cho nên bạn đừng nên tin tưởng tuyệt đối vào server! Ở ví dụ trên, nếu browser hỗ trợ, nhưng file có dung lượng lớn hơn 30000 byte sẽ được browser thông báo lỗi khi submit form.</p>
<p><strong>XỬ LÝ DỮ LIỆU ĐƯỢC SUBMIT LÊN SERVER</strong></p>
<p>Bây giờ ta hãy xem xét tới phần xử lý dữ liệu được submit lên server trong file process_upload.php. PHP lưu thông tin về file được upload lên server trong biến global $_FILES. Với form ở ví dụ trên, PHP sẽ truyền cho script process_upload.php các thông tin sau:</p>
<p>* $_FILES['file_upload']['name']: tên file gốc trên máy client. Tuỳ vào browser, tên file có thể được truyền lên server ở dạng C:folderfilename.ext hoặc chỉ là filename.ext. Chương trình phải tự kiểm tra và trích ra tên file nếu cần thiết.<br />
* $_FILES['file_upload']['type']: kiểu của file, được lưu ở dạng MINE (Ví dụ: image/gif, audio/wav).<br />
* $_FILES['file_upload']['size']: dung lượng của file tính theo byte.<br />
* $_FILES['file_upload']['tmp_name']: sau khi upload, server sẽ lưu file vào một file tạm trên server, biến này cho ta biết đường dẫn và tên của file tạm đó. Chương trình sẽ đọc file tạm này để lấy nội dung của file được upload.<br />
* $_FILES['file_upload']['error']: mã lỗi, chương trình nên kiểm tra biến này để bảo đảm rằng quá trình upload không xảy ra lỗi.<br />
o UPLOAD_ERR_OK ( = 0 ): không có lỗi, quá trình upload thành công.<br />
o UPLOAD_ERR_INI_SIZE ( = 1 ): dung lượng file upload vượt quá giới hạn được chỉ định trong file php.ini.<br />
o UPLOAD_ERR_FORM_SIZE ( = 2 ): dung lượng file upload vượt quá giới hạn được chỉnh định bởi MAX_FILE_SIZE.<br />
o UPLOAD_ERR_PARTIAL ( = 3 ): file chỉ được upload 1 phần (có thể là do lỗi đường truyền trong quá trình upload).<br />
o UPLOAD_ERR_NO_FILE ( = 4 ): không có file nào được upload (có thể là file ở client không tồn tại).</p>
<p>Khi đã có toàn bộ các thông tin cần thiết, xử lý file như thế nào là quyến định của bạn. Bạn có thể đọc nội dung của file và lưu vào database, hoặc di chuyển file và lưu vào thư mục upload của bạn. Sau đây là 1 ví dụ của file process_upload.php.</p>
<p>Đầu tiên, kiểm tra xem tác vụ có phải là upload hay không:</p>
<p>if ( $_SERVER["REQUEST_METHOD"] != &#8220;POST&#8221; ) {<br />
//thông báo lỗi không phải là method POST<br />
//và thoát<br />
exit(-1);<br />
} //end if</p>
<p>Tiếp theo kiểm tra xem quá trình upload có lỗi gì không:</p>
<p>if ( !isset($_FILES["file_upload"]["error"] ||<br />
$_FILES["file_upload"]["error"] != 0 ) {<br />
//thông báo lỗi dựa vào giá trị của $_FILES["file_upload"]["error"]<br />
//và thoát<br />
exit(-1);<br />
} //end if</p>
<p>//ta cũng có thể kiểm tra xem dung lượng file có vượt quá giới hạn<br />
//của chương trình hay không<br />
if ( $_FILES["file_upload"]["size"] &gt; $MAX_FILE_SIZE ) {<br />
//thông báo lỗi<br />
//và thoát<br />
exit(-1);<br />
}</p>
<p>Tách tên file từ client:</p>
<p>$temp = preg_split(&#8216;/[/\\]+/&#8217;, $_FILES["file_upload"]["name"]);<br />
$filename = $temp[count($temp)-1];</p>
<p>//ta cũng có thể kiểm tra phần mở rộng của file nếu cần thiết<br />
if ( !preg_match(&#8216;/.(gif|jpg)$/i&#8217;, $filename ) {<br />
//thông báo lỗi file upload không phải là dạng GIF hoặc JPG<br />
//và thoát<br />
exit(-1);<br />
} //end if</p>
<p>Và cuối cùng, lưu file được upload vào nơi cần thiết:</p>
<p>$upload_dir = &#8220;/home/nbthanh/public_html/uploads/&#8221;;<br />
$upload_file = $uploaddir . $filename;<br />
if ( move_uploaded_file($_FILES["file_upload"]["tmp_name"], $upload_file) ) {<br />
//file đã được upload và copy sang thư mục lưu trữ thành công<br />
} else {<br />
//có lỗi xảy ra<br />
} //end if</p>
<p><strong>CÁC HÀM PHP ĐƯỢC DÙNG TRONG VÍ DỤ</strong></p>
<p>* exit: dừng/thoát chương trình ngay lập tức.<br />
* isset: kiểm tra xem biến có tồn tại hay không. Trong ví dụ của bài viết, ta dùng hàm isset để kiểm tra xem biến $_FILES["file_upload"]["error"] có tồn tại hay không.<br />
* preg_split: tách một chuỗi thành từng phần nhỏ theo regular expression. Trong ví dụ của bài viết, ta dùng hàm này để tách tên file cùng đường dẫn ra thành từng phần nhỏ (phân cách nhau bằng ký tự  hoặc /, ta không biết chắc được client là Windows hay Linux nên ta tách theo trường hợp tổng quát). Sau khi tách, phần tử cuối cùng sẽ là tên file.<br />
Một cách khác để lấy tên file là dùng hàm basename. Tuy nhiên sử dụng hàm này sẽ có một số vấn đề nảy sinh, bạn tham khảo thêm ở đây: <a href="http://anonym.to/?http://www.php.net/manual/en/function.basename.php" target="_blank"><span style="color: #000030; text-decoration: none;">http://anonym.to/?http://www.php.net/manual/en/function.basename.php</span></a>.<br />
* count: đếm số lượng phần tử trong mảng. $a[count($a)-1] sẽ truy cập tới phần tử cuối cùng của mảng $a.<br />
* preg_match: sử dụng regular expression để tìm xem chuỗi con có xuất hiện trong chuỗi mẹ hay không. Trong ví dụ của bài viết, ta dùng hàm này để kiểm tra xem tên của của có được kết thúc bằng .gif hoặc .jpg hay không.<br />
* move_uploaded_file: di chuyển file được upload từ client đến 1 thư mục khác trên server.</p>
<p><strong>TÀI LIỆU THAM KHẢO</strong></p>
<p>* PHP Manual: <a href="http://anonym.to/?http://www.php.net/manual/en/index.php" target="_blank"><span style="color: #000030; text-decoration: none;">http://anonym.to/?http://www.php.net/manual/en/index.php</span></a><br />
o Regular Expression Functions (Perl-Compatible): <a href="http://anonym.to/?http://www.php.net/manual/en/ref.pcre.php" target="_blank"><span style="color: #000030; text-decoration: none;">http://anonym.to/?http://www.php.net/manual/en/ref.pcre.php</span></a><br />
o Handling file uploads: <a href="http://anonym.to/?http://www.php.net/manual/en/features.file-upload.php" target="_blank"><span style="color: #000030; text-decoration: none;">http://anonym.to/?http://www.php.net/manual/en/features.file-upload.php</span></a><br />
* Từ Google: từ khoá php tutorial upload file</p>
<p class="MsoNormal" style="text-align: right;">
<p><em><strong>Source from <a href="http://anonym.to/?http://www.diendantinhoc.net/tute/webdev/php/php_by_examples/basic/tute_upload_file.php" target="_blank"><span style="color: #000030; text-decoration: none;">DDTH</span></a></strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2009/06/04/upload-file-len-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Thủ thuật php</title>
		<link>http://phamcuong.info/2009/06/04/th%e1%bb%a7-thu%e1%ba%adt-php/</link>
		<comments>http://phamcuong.info/2009/06/04/th%e1%bb%a7-thu%e1%ba%adt-php/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 05:03:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=174</guid>
		<description><![CDATA[Sử dụng PHP để chuyển đến 1 URL khác PHP Code: &#60;?php header(&#8220;Location: http://yoursite.com/&#8221;) ?&#62; Trong HTML bạn có thể sử dụng đoạn mã sau: Code: &#60;html&#62; &#60;head&#62; &#60;title&#62;Please wait&#8230;&#60;/title&#62; &#60;script language=&#8221;JavaScript&#8221;&#62; self.location.href=&#8217;http://yoursite.com/&#8217;; &#60;/script&#62; &#60;/head&#62; &#60;body&#62; &#60;/body&#62; &#60;/html&#62; Bạn sử dụng đoạn PHP sau trong đoạn mà bạn muốn hiển thị: PHP Code: &#60;? $browser [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana; color: black;">Sử dụng PHP để chuyển đến 1 URL khác</span></p>
<p><span id="more-174"></span></p>
<p>PHP</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">&lt;?php </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">header(&#8220;Location: http://yoursite.com/&#8221;) </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">?&gt;</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;">
<p>Trong HTML bạn có thể sử dụng đoạn mã sau:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">&lt;html&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>&lt;head&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>&lt;title&gt;Please wait&#8230;&lt;/title&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>&lt;script language=&#8221;JavaScript&#8221;&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>self.location.href=&#8217;http://yoursite.com/&#8217;; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>&lt;/script&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>&lt;/head&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>&lt;body&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>&lt;/body&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>&lt;/html&gt;</span></p>
</blockquote>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana; color: black;">Bạn sử dụng đoạn PHP sau trong đoạn mà bạn muốn hiển thị:</span></p>
<p>PHP</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">&lt;?<span> </span></span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">$browser = &#8220;$HTTP_USER_AGENT&#8221;;<span> </span></span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">print(&#8220;Bạn đang sử dụng: $browser&#8221;) </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">?&gt; </span></p>
</blockquote>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
hoặc</span></p>
<p>PHP</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span></span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">print(&#8220;&lt;font color=&#8221;red&#8221;&gt; Bạn đang sử dụng: $browser &lt;font&gt;&#8221;)</span></p>
</blockquote>
<p class="MsoNormal">Còn cập nhật thêm</p>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2009/06/04/th%e1%bb%a7-thu%e1%ba%adt-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tương tác với server bằng form</title>
		<link>http://phamcuong.info/2009/06/04/t%c6%b0%c6%a1ng-tac-v%e1%bb%9bi-server-b%e1%ba%b1ng-form/</link>
		<comments>http://phamcuong.info/2009/06/04/t%c6%b0%c6%a1ng-tac-v%e1%bb%9bi-server-b%e1%ba%b1ng-form/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 05:02:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=171</guid>
		<description><![CDATA[Việc tương tác với server bằng form có lẽ là một trong những công việc mà các bạn rất hay gặp khi lập trình web. Hãy nghĩ đơn giản, dưới góc độ một user trong UDS, bạn đã phải tương tác với bao nhiêu là form: form register, form login, form post bài nhanh &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;">Việc tương tác với server bằng form có lẽ là một trong những công việc mà các bạn rất hay gặp khi lập trình web.<span id="more-171"></span> Hãy nghĩ đơn giản, dưới góc độ một user trong UDS, bạn đã phải tương tác với bao nhiêu là form: form register, form login, form post bài nhanh &#8211; post bài advance, form để report cho mod&#8230; Nhiều quá hóa&#8230; chóng mặt <!--[if gte vml 1]><v:shapetype  id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"  path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:13.5pt;  height:13.5pt'> <v:imagedata src="file:///C:UsersCAMAppDataLocalTempmsohtml11clip_image001.gif" mce_src="file:///C:UsersCAMAppDataLocalTempmsohtml11clip_image001.gif"   o:href="file:///D:BAIHOCphpupdatesoftsTương%20tác%20với%20server%20bằng%20form%20-%20Updatesofts%20Forums_files4.gif" /> <o:lock v:ext="edit" cropping="t" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--></span></p>
<p>Các form đó đều có điểm chung: Đều được viết bằng HTML. Hãy cùng nhắc lại đôi chút về cách tạo form với HTML:</p>
<p>Trước hết, bạn hãy dành 30 giây trong quỹ thời gian &#8220;ít ỏi&#8221; của mình để ngẫm lại: HTML có cấu trúc như thế nào?</p>
<p>Nói một cách ngắn gọn, một file HTML có cấu tạo như sau:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">HTML Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: navy;">&lt;html&gt;</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: navy;">&lt;head&gt;</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: navy;">&lt;title&gt;<em>&lt;!&#8211; Tiêu đề &#8211;&gt;</em>&lt;/title&gt;</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: navy;">&lt;/head&gt;</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: navy;">&lt;body&gt;</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span></span><em><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: navy;">&lt;!&#8211; Nội dung &#8211;&gt;</span></em></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: navy;">&lt;/body&gt;</span></p>
<p>&lt;/html&gt;</p></blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Form trong HTML được đặt trong phần &lt;body&gt;&lt;/body&gt;. Ví dụ như sau:</span></p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">HTML Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;">&lt;form action=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&#8220;process.php&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;"> method=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&#8220;GET&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;">&gt;</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>Tên: </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;">&lt;input type=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&#8220;text&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;"> name=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&#8220;name&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;"> /&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: navy;">&lt;br /&gt;</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>Tuổi: </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;">&lt;input type=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&#8220;text&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;"> name=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&#8220;age&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;"> /&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: navy;">&lt;br /&gt;</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span></span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;">&lt;input type=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&#8220;submit&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;"> value=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: blue;">&#8220;Submit!&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;"> /&gt;</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #ff8000;">&lt;/form&gt;</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;">
<p>Đoạn code HTML trên có tác dụng gì? Rất đơn giản, nó giúp tạo ra 1 form với 2 ô để nhập dữ liệu: Tên và tuổi. Kèm theo đó là 1 nút lệnh mang chữ Submit. Rất giản dị và ko có gì khó hiểu ở đây cả.</p>
<p>À, có 1 điều này cần giải thích: Ở dòng đầu tiên của đoạn code, thẻ form có 2 thuộc tính: action và method. Hai thuộc tính này có mục đích gì?</p>
<p>1. action=&#8221;process.php&#8221; nghĩa là sau khi bấm submit, dữ liệu sẽ được chuyển qua file process.php nằm cùng thư mục với file HTML này<br />
2. method=&#8221;GET&#8221; nghĩa là phương thức truyền dữ liệu sẽ là GET.</p>
<p>Vậy, bạn đã biết dữ liệu sẽ được chuyển qua file process.php, mà hiển nhiên file process.php này chưa tồn tại, nên một điều rất tự nhiên là ta sẽ tạo file process.php với nội dung sau:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">PHP Code:</span></p>
<p class="MsoNormal" style="background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #0000bb;">&lt;?php </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #0000bb;"><br />
</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #0000bb;"> $name </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;">= </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #0000bb;">$_GET</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;">[</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #dd0000;">"name"</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;">]; </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;"><br />
</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;"> </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #0000bb;">$age </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;">= </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #0000bb;">$_GET</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;">[</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #dd0000;">"age"</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;">]; </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;"><br />
</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;"> echo </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #dd0000;">&#8220;Tên bạn: $name&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;">; </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;"><br />
</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;"> echo </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #dd0000;">&#8220;Tuổi của bạn: $age&#8221;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;">; </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #007700;"><br />
</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #0000bb;">?&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"> </span></p>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Hai dòng cuối của ví dụ trên có lẽ chẳng có j` để bàn. Chỉ đơn giản là echo 2 biến $name và $age ra màn hình. Vấn đề nằm trong 2 dòng đầu.</span></p>
<p>Ta lấy dòng thứ 1 để mổ xẻ: $name = $_GET["name"]; Ở đây ai cũng biết giá trị của $name được gán từ $_GET["name"]. Vậy là chỉ còn duy nhất 1 điều cần thắc mắc: $_GET là gì?</p>
<p>$_GET là mảng để chứa các giá trị được chuyển từ form sang. Ở đây $_GET gồm 2 phần tử: $_GET["name"] và $_GET["age"].</p>
<p>Mọi vấn đề đến đây được giải quyết.</p>
<p>Giờ ta thử xét form ở Ví dụ ban đầu. Bạn hãy làm một phép thay đổi nhỏ: Đổi method=&#8221;GET&#8221; bằng method=&#8221;POST&#8221;.</p>
<p>Khi đó hiển nhiên process.php sẽ ko hoạt động <!--[if gte vml 1]><v:shape id="_x0000_i1026"  type="#_x0000_t75" alt="" style='width:13.5pt;height:13.5pt'> <v:imagedata src="file:///C:UsersCAMAppDataLocalTempmsohtml11clip_image002.gif" mce_src="file:///C:UsersCAMAppDataLocalTempmsohtml11clip_image002.gif"   o:href="file:///D:BAIHOCphpupdatesoftsTương%20tác%20với%20server%20bằng%20form%20-%20Updatesofts%20Forums_files22.gif" /> <o:lock v:ext="edit" cropping="t" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--></p>
<p>Nếu suy diễn một cách educated, bạn sẽ ngay lập tức sửa sai bằng cách thay đổi $_GET bằng $_POST. Kết quả? Đúng goài <!--[if gte vml 1]><v:shape id="_x0000_i1027"  type="#_x0000_t75" alt="" style='width:13.5pt;height:13.5pt'> <v:imagedata src="file:///C:UsersCAMAppDataLocalTempmsohtml11clip_image001.gif" mce_src="file:///C:UsersCAMAppDataLocalTempmsohtml11clip_image001.gif"   o:href="file:///D:BAIHOCphpupdatesoftsTương%20tác%20với%20server%20bằng%20form%20-%20Updatesofts%20Forums_files4.gif" /> <o:lock v:ext="edit" cropping="t" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--></p>
<p>Đến đây ta có thể sung sướng rút ra kết luận: Để nhận biến từ form chuyển sang, có thể sử dụng mảng $_GET hoặc $_POST, tùy vào phương thức truyền dữ liệu của form.</p>
<p>Bài học kết thúc ở đây được rồi nhỉ? <!--[if gte vml 1]><v:shape id="_x0000_i1028"  type="#_x0000_t75" alt="" style='width:13.5pt;height:13.5pt'> <v:imagedata src="file:///C:UsersCAMAppDataLocalTempmsohtml11clip_image001.gif" mce_src="file:///C:UsersCAMAppDataLocalTempmsohtml11clip_image001.gif"   o:href="file:///D:BAIHOCphpupdatesoftsTương%20tác%20với%20server%20bằng%20form%20-%20Updatesofts%20Forums_files4.gif" /> <o:lock v:ext="edit" cropping="t" /> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--></p>
<p>Chưa đâu bạn ạ. Còn một điều chưa nói đến: Sự khác nhau giữa $_GET và $_POST là j`? Hay đúng hơn, sự khác nhau giữ method GET và POST là gì?</p>
<p>Nói đến GET và POST, trước hết ta sẽ nói đến HTTP Request.</p>
<p>Một HTTP Request được gửi tới server có định dạng như sau:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">&lt;request-line&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">&lt;headers&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">&lt;blank line&gt; </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">[&lt;request-body&gt;] </span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Một HTTP Request được gửi tới trang web <a href="http://anonym.to/?http://www.abc.com" target="_blank"><span style="color: #000030; text-decoration: none;">http://anonym.to/?http://www.abc.com</span></a> từ trình duyệt Firefox sẽ tương tự như ví dụ sau:</span></p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">GET / HTTP/1.1 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Host: www.abc.com</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span><span> </span>Gecko/20050225 Firefox/1.0.1 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Connection: Keep-Alive </span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Tương tự, một Request gửi đến trang <a href="http://anonym.to/?http://www.abc.com/def" target="_blank"><span style="color: #000030; text-decoration: none;">http://anonym.to/?http://www.abc.com/def</span></a> sẽ có dạng như sau:</span></p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">GET /def/ HTTP/1.1 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Host: www.abc.com</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>Gecko/20050225 Firefox/1.0.1 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Connection: Keep-Alive </span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Như các bạn có thể thấy, 2 ví dụ trên đều dùng phương thức GET để request dữ liệu.</span></p>
<p>Giờ hãy tưởng tượng, sau khi điền vào form 1 giá trị name là admin, age là 20, bạn bấm nút submit để gửi dữ liệu đến file process.php.</p>
<p>Trên thanh address sẽ hiện ra url: process.php?name=admin&amp;age=20</p>
<p>Nếu xem xét một cách kỹ lưỡng HTTP Request, ta sẽ thấy nó như sau:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">GET /process.php?name=admin&amp;age=20 HTTP/1.1 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Host: www.abc.com</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>Gecko/20050225 Firefox/1.0.1 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Connection: Keep-Alive </span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Tóm lại, khi dùng phương thức GET, trình duyệt sẽ gửi Request tới server với các tham số đặt trong dòng đầu tiên (request-line).</span></p>
<p>Còn với phương thức POST thì sao? Thay nằm trong request-line, những tham số này được đặt trong phần request-body.</p>
<p>Ví dụ ta giữ nguyên form trên, chỉ thay method=&#8221;GET&#8221; bằng method=&#8221;POST&#8221; và bấm Submit. Khi đó đây sẽ là HTTP Request &#8220;behind the scene&#8221;:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">POST / HTTP/1.1 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Host: www.abc.com</span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span>Gecko/20050225 Firefox/1.0.1 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Content-Type: application/x-www-form-urlencoded </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Content-Length: 40 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Connection: Keep-Alive </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;"><span> </span></span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">name=admin&amp;age=20</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Có thể dễ dàng thấy rằng, ngoài việc thêm một số dòng vào phần header:</span></p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Content-Type: application/x-www-form-urlencoded </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Content-Length: 40 </span></p>
<p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Connection: Keep-Alive </span></p>
</blockquote>
<p><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
thì phương thức POST đã &#8220;cất&#8221; các tham số của mình trong phần request-body. Điều này hiển nhiên khác hẳn phương thức GET.<br />
<!--[if !supportLineBreakNewLine]--></span></p>
<p style="text-align: right;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><strong><em>Isheep</em></strong><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2009/06/04/t%c6%b0%c6%a1ng-tac-v%e1%bb%9bi-server-b%e1%ba%b1ng-form/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tìm kiếm và thay thế trong xâu với Regular Expression</title>
		<link>http://phamcuong.info/2009/06/04/tim-ki%e1%ba%bfm-va-thay-th%e1%ba%bf-trong-xau-v%e1%bb%9bi-regular-expression/</link>
		<comments>http://phamcuong.info/2009/06/04/tim-ki%e1%ba%bfm-va-thay-th%e1%ba%bf-trong-xau-v%e1%bb%9bi-regular-expression/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 05:00:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Lập trình]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://phamcuong.info/?p=168</guid>
		<description><![CDATA[Ở bài trước, chúng ta đã xem xét qua một số hàm thường gặp khi xử lý xâu trong PHP. Để tìm kiếm trong xâu, ta có thể dùng strpos() hoặc substr(), nhưng với những hàm này ta chỉ có thể tìm kiếm một cách hết sức hạn chế. Hãy thử tưởng tượng, nếu bạn [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;">Ở bài trước, chúng ta đã xem xét qua một số hàm thường gặp khi xử lý xâu trong PHP. Để tìm kiếm trong xâu, ta có thể dùng strpos() hoặc substr()<span id="more-168"></span>, nhưng với những hàm này ta chỉ có thể tìm kiếm một cách hết sức hạn chế. Hãy thử tưởng tượng, nếu bạn muốn kiểm tra xem 1 xâu có phải là một địa chỉ IP, hay một địa chỉ email đúng đắn hay ko, sẽ phải sử dụng rất nhiều câu lệnh if.</span></p>
<p>Trong những trường hợp như thế này, ta sẽ sử dụng Regular Expression. Regular Expression, viết tắt là RegEx, có rất nhiều định nghĩa. Đây là một trong số các định nghĩa đơn giản nhất:</p>
<p><em>Regular Expression là một cách thức thể hiện dữ liệu dưới dạng các ký tự đại diện. Nó được dùng trong các thuật toán tìm kiếm, thay thế xâu.</em></p>
<p>Đây là ví dụ về một RegEx dùng để kiểm tra xem một xâu có phải là địa chỉ IP đúng đắn hay ko:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Nhìn thì có vẻ rất phức tạp chứ thực ra RegEx trên rất đơn giản và dễ hiểu một khi bạn đã nắm được cách sử dụng.</span></p>
<p>Ta sẽ quay trở lại ví dụ trên sau khi đã học được một số điều cần thiết. Giờ hãy dành thời gian vào việc tìm hiểu cú pháp, cách viết 1 RegEx:</p>
<p><strong>1.RegEx CÓ phân biệt ký tự hoa &#8211; thường. (case sensitive)</strong></p>
<p>Ví dụ ta có một xâu như sau:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Hello, UDS</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Khi đó RegEx <strong>Hello</strong> sẽ phù hợp với phần đầu của xâu nói trên, còn <strong>hello</strong> thì ko.</span></p>
<p><strong>2. Mọi ký tự trong RegEx đều ứng với một ký tự trong xâu cần kiểm tra, kể cả ký tự trắng (dấu cách, dấu tab, dấu xuống dòng). </strong></p>
<p>Ví dụ với xâu:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Hello, UDS</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Thì <strong>Hello, UDS</strong> sẽ phù hợp còn <strong>Hello, UDS</strong> ko.</span></p>
<p><strong>3. Một số ký tự có ý nghĩa đặc biệt. Ký tự ^ chỉ sự bắt đầu một xâu, còn $ chỉ sự kết thúc.</strong></p>
<p>Ví dụ: Xâu</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">UDS is UDS</span></p>
</blockquote>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
<strong>^UDS</strong> sẽ phù hợp với đoạn UDS đầu xâu, trong khi <strong>UDS$</strong> sẽ phù hợp với đoạn UDS cuối xâu.</span></p>
<p><strong>4. Cũng như trong PHP, ký tự  được sử dụng để escape một số ký tự đặc biệt. Ví dụ $, ^, -</strong></p>
<p>Xâu:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">$abc$</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
<strong>$</strong> phù hợp với ký tự $ đầu xâu.</span></p>
<p><strong>5. Ký tự . phù hợp với mọi ký tự</strong></p>
<p>Ví dụ:</p>
<p>RegEx <strong>&#8230;</strong> phù hợp với 3 ký tự đầu trong xâu</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">UDS is a great community!!!</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
Dĩ nhiên, để 1 ký tự trong RegEx phù hợp với dấu . (thật) thì cần phải escape dấu . ấy như thế này .</span></p>
<p>Ví dụ:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">O.K.</span></p>
</blockquote>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
<strong>.</strong> sẽ phù hợp với dấu . thứ nhất sau ký tự O.</span></p>
<p class="MsoNormal" style="margin-bottom: 12pt;"><strong><span style="font-size: 10pt; font-family: Verdana; color: black;">6. Một danh sách các ký tự có thể đặt trong dấu ngoặc vuông []. Khi đó bất cứ ký tự nào trong ngoặc vuông được tìm thấy, ký tự đó sẽ được coi là phù hợp. Trật tự các ký tự trong ngoặc là ko quan trọng.</span></strong></p>
<p>Ví dụ:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">How do you do?</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
<strong>[oyu]</strong> sẽ phù hợp với ký tự o trong từ How</span></p>
<p><strong>[dH].</strong> sẽ phù hợp với ký tự Ho trong từ How.</p>
<p><strong>7. Một dải (range) các ký tự có thể được thể hiện bằng cú pháp [ - ]. Có thể có nhiều dải trong một cặp ngoặc [].</strong></p>
<p>Ví dụ:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
<strong>[C-K]</strong> sẽ phù hợp với ký tự C.</span></p>
<p><strong>[a-d]</strong> sẽ phù hợp với ký tự a.</p>
<p><strong>[C-Ka-d2-6]</strong> sẽ phù hợp với ký tự C.</p>
<p><strong>8. Nếu một lớp các ký tự đặt trong dấu [] được mở đầu bằng ký tự ^, những ký tự đó sẽ được coi là ko phù hợp.</strong></p>
<p>Ví dụ:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 0123456789</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
<strong>[^CDghi45]</strong> sẽ ko phù hợp với các ký tự C, D, g, h, i, 4, 5.</span></p>
<p><strong>9. Các xâu khác nhau có thể được đặt trong dấu () và phân cách bằng ký tự |.</strong></p>
<p>Ví dụ:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">Monday Tuesday Friday</span></p>
</blockquote>
<p class="MsoNormal" style="margin-bottom: 12pt;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
<strong>(on|ues|rida)</strong> sẽ phù hợp với đoạn on trong từ Monday, ues trong từ Tuesday,&#8230;</span></p>
<p><strong>10. Có thể chỉ ra số lần ký tự sẽ xuất hiện. Ký tự * phù hợp với &#8220;ko hoặc nhiều hơn thế&#8221;, + phù hợp với &#8220;một hoặc nhiều hơn thế&#8221;, ? phù hợp với &#8220;ko hoặc một&#8221;.</strong></p>
<p>Ví dụ:</p>
<p class="MsoNormal"><span style="font-size: 8.5pt; font-family: Verdana; color: black;">Code:</span></p>
<blockquote><p class="MsoNormal" style="border: medium none; padding: 0cm; background: #f6f6f6 none repeat scroll 0% 0%;"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">aabc abc bc</span></p>
</blockquote>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Verdana; color: black;"><br />
<strong>a*b</strong> hoặc <strong>a+b</strong> phù hợp với aab.</span></p>
<p><strong>a?b</strong> phù hợp với ab.</p>
<p class="MsoNormal">
<p class="MsoNormal" style="text-align: right;"><span style="font-size: 10pt; font-family: Verdana; color: black;"><em><strong>copy from updatesoft</strong></em><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://phamcuong.info/2009/06/04/tim-ki%e1%ba%bfm-va-thay-th%e1%ba%bf-trong-xau-v%e1%bb%9bi-regular-expression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
