<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8668360022691568358</id><updated>2011-11-27T20:01:20.110-05:00</updated><category term='EAN'/><category term='AJAX'/><category term='PHP'/><category term='ISBN13'/><category term='ISBN-13'/><category term='JavaScript'/><category term='JSON'/><category term='ISBN10'/><category term='ISBN-10'/><title type='text'>Computers &amp; Philosophy</title><subtitle type='html'>Programming: JavaScript, PHP, CSS, JSON, AJAX &lt;br /&gt;
Philosophy: Plato, Aristotle, Hume, Hobbes, Locke, Descartes, Berkley, Nietzsche, and of course my own.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://drenintell.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668360022691568358/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://drenintell.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>drenintell</name><uri>http://www.blogger.com/profile/15234354120752365220</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8668360022691568358.post-7661911317674438051</id><published>2008-01-23T15:18:00.000-05:00</published><updated>2008-01-23T17:05:48.470-05:00</updated><title type='text'>XP solitaire bug?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WvDucGnvvYw/R5ehOOS5y2I/AAAAAAAAAAw/aRJYsmsxSqM/s1600-h/Weired+Solitare.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_WvDucGnvvYw/R5ehOOS5y2I/AAAAAAAAAAw/aRJYsmsxSqM/s320/Weired+Solitare.JPG" alt="" id="BLOGGER_PHOTO_ID_5158769163903814498" border="0" /&gt;&lt;/a&gt;Just when I thought that Microsoft had ironed out the small bugs out of Windows XP, this happens - see the picture on the left.&lt;br /&gt;&lt;br /&gt;Yesterday, having some free time, I decided to play a game or two of solitaire. It must have been the third or fourth game when all of a sudden I found myself asking, "What the heck?". I double clicked on the Ace of Spades... nothing. Tried right clicking... nothing. Then I looked at the four suit stacks, and there it was... a bug in solitaire.&lt;br /&gt;&lt;br /&gt;The first thought that went through my mind was, "No way! After all this time... how?" Solitaire is an old game and has been part of the Windows OS for over 10 years. How can a bug exist in a simple game such as solitaire after 10 years?&lt;br /&gt;&lt;br /&gt;Now it is possible that something in my system went haywire. If so, it would be a first - as my system has been stable, and running well since day one - and continues to do so. What's more, afterwards, I continued playing solitaire as normal. Therefore I must&lt;br /&gt;assume what happened was due to a bug in solitaire. Not a big deal, though surely interesting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668360022691568358-7661911317674438051?l=drenintell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drenintell.blogspot.com/feeds/7661911317674438051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668360022691568358&amp;postID=7661911317674438051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668360022691568358/posts/default/7661911317674438051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668360022691568358/posts/default/7661911317674438051'/><link rel='alternate' type='text/html' href='http://drenintell.blogspot.com/2008/01/windows-xp-solitare-bug.html' title='XP solitaire bug?'/><author><name>drenintell</name><uri>http://www.blogger.com/profile/15234354120752365220</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_WvDucGnvvYw/R5ehOOS5y2I/AAAAAAAAAAw/aRJYsmsxSqM/s72-c/Weired+Solitare.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668360022691568358.post-3546366685427088426</id><published>2008-01-21T17:54:00.000-05:00</published><updated>2008-01-31T11:27:23.754-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EAN'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='ISBN13'/><category scheme='http://www.blogger.com/atom/ns#' term='ISBN-10'/><category scheme='http://www.blogger.com/atom/ns#' term='ISBN10'/><category scheme='http://www.blogger.com/atom/ns#' term='ISBN-13'/><title type='text'>PHP ISBN Functions</title><content type='html'>A while back, when the ISBN-13 standard was released, I wrote some ISBN functions for a project I was working on. Since several people have been looking for such functions, I decided to share the code I wrote. Here is the ISBN class:&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;&lt;!-- body { color: #000000; background-color: #FFFFFF; } .taxhighlighter1-defaultstyle { color: #000000; } .taxhighlighter1-inactivelanguage { color: #C0C0C0; } .taxhighlighter1-italic { font-style: italic; } .taxhighlighter1-bold { font-weight: bold; } .taxhighlighter1-boldanditalic { font-weight: bold; font-style: italic; } .taxhighlighter1-phpdefault { color: #000000; } .taxhighlighter1-phpcontrolchar { color: #008000; } .taxhighlighter1-phpstrings { color: #0000FF; } .taxhighlighter1-phpquotedstrings { color: #0000FF; } .taxhighlighter1-phpheredocdelimiters { color: #0000FF; font-weight: bold; } .taxhighlighter1-phpvariablesinstring { color: #000080; font-weight: bold; } .taxhighlighter1-phpcomments { color: #A0A0A0; } .taxhighlighter1-phpcommenturl { color: #808080; text-decoration: underline; } .taxhighlighter1-phpphpanchor { color: #FF0000; font-weight: bold; } .taxhighlighter1-phpvariable { color: #800080; } .taxhighlighter1-phpnumber { color: #FF0000; } .taxhighlighter1-phpphpdockeyword { color: #808080; } .taxhighlighter1-phpreservedwords { color: #000000; font-weight: bold; } .taxhighlighter1-phpphpfunctions { color: #000080; } .taxhighlighter1-phpoperators { color: #000000; } .taxhighlighter1-phpbadphpanchor { color: #000000; font-weight: bold; } .taxhighlighter1-phpnonphp { color: #C0C0C0; } .taxhighlighter1-phphtmlurl { color: #C0C0C0; text-decoration: underline; } .taxhighlighter1-phpphpconstants { color: #800080; font-weight: bold; } .taxhighlighter1-phpphpcasting { color: #000000; text-decoration: underline; } .taxhighlighter1-phpwhitespace { } .taxhighlighter1-phpbooleanandlogicaloperators { color: #000000; font-weight: bold; } .taxhighlighter1-phpcomparisonoperators { color: #000000; } .taxhighlighter1-phpvariablevariable { color: #800080; } .taxhighlighter1-phppunctuation { color: #000000; } .taxhighlighter1-phpuserconstant { color: #FF00FF; font-weight: bold; } --&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-style: normal; font-variant: normal; font-weight: normal; line-height: normal; font-size-adjust: none; font-stretch: normal;font-family:Courier New;font-size:10;"  &gt;&lt;span class="taxhighlighter1-phpphpanchor"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;class&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; ISBN {&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# Converts an ISBN-10 to ISBN-13.&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# For more information about ISBN-10 to ISBN-13 conversion see:&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# &lt;/span&gt;&lt;span class="taxhighlighter1-phphtmlurl"&gt;http://www.bisg.org/isbn-13/conversions.html&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;#&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;public&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;function&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; isbn_10_to_isbn_13( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_10&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; ) {&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;if&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;( !&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$this&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;-&amp;gt;is_valid_isbn_10(&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) ) {&lt;br /&gt;     &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;return&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpphpconstants"&gt;false&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_13&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;= &lt;/span&gt;&lt;span class="taxhighlighter1-phpquotedstrings"&gt;'978'&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; . &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;=&lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;for&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;= &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;13&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;; &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &amp;gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;1&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;; &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;-- ) {&lt;br /&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;+=  (&lt;/span&gt;&lt;span class="taxhighlighter1-phpphpcasting"&gt;(int)&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_13&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;{&lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;13&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; - &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;}) * (((&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; % &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;2&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) == &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) ? &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;3&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; : &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;1&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_13&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;{&lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;12&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;}= ((&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; % &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) == &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) ? &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; : (&lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;10&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; - (&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; % &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;));&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;return&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_13&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# Removes any "white spaces" and hyphens from an ISBN-10 string.&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# Because of the possibility of 'x' or 'X' in ISBN, you should not use the "\D" option.&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;#&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;public&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;function&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; clean_isbn_10( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$str&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; ) {&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$pattern&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; = &lt;/span&gt;&lt;span class="taxhighlighter1-phpquotedstrings"&gt;'/[\s|-]/'&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$replacement&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; = &lt;/span&gt;&lt;span class="taxhighlighter1-phpquotedstrings"&gt;''&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;return&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpphpfunctions"&gt;preg_replace&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$pattern&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;, &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$replacement&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;, &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$str&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# Validates an ISBN-10 number using the check digit.&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# Use clean_isbn_10 function on the ISBN-10 string before calling this function.&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# For more information see about ISBN-10 numbers see:&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# &lt;/span&gt;&lt;span class="taxhighlighter1-phphtmlurl"&gt;http://www.isbn.org/standards/home/isbn/international/html/usm4.htm&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;#&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;public&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;function&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; is_valid_isbn_10( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_10&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; ) {&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# Note, isbn-10 has 'X' or 'x' as a check digit signifying the number 10&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;    &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;if&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;( !&lt;/span&gt;&lt;span class="taxhighlighter1-phpphpfunctions"&gt;ereg&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;(&lt;/span&gt;&lt;span class="taxhighlighter1-phpquotedstrings"&gt;'^([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9xX])$'&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;, &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) ) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;return&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpphpconstants"&gt;false&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;= &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;for&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;= &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;; &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &amp;gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;1&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;; &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;-- ) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;+= (&lt;/span&gt;&lt;span class="taxhighlighter1-phpphpcasting"&gt;(int)&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;{&lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;10&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; - &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;}) * &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;+= &lt;/span&gt;&lt;span class="taxhighlighter1-phpphpfunctions"&gt;ereg&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;(&lt;/span&gt;&lt;span class="taxhighlighter1-phpquotedstrings"&gt;'[xX]$'&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;, &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) ? &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;10&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; : ( &lt;/span&gt;&lt;span class="taxhighlighter1-phpphpcasting"&gt;(int)&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;{&lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;9&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;} );&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;return&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; ( (&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; % &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;11&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) == &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# Removes any non-numeric characters from an ISBN-13/EAN string.&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;#&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;public&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;function&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; clean_isbn_13( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$str&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; ) {&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$pattern&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; = &lt;/span&gt;&lt;span class="taxhighlighter1-phpquotedstrings"&gt;'/\D/'&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$replacement&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; = &lt;/span&gt;&lt;span class="taxhighlighter1-phpquotedstrings"&gt;''&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;return&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpphpfunctions"&gt;preg_replace&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$pattern&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;, &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$replacement&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;, &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$str&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# Validates an EAN number using the check digit. Note ISBN-13 numbers are a subset of EAN numbers.&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# For more information about ISBN-13 see:&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# &lt;/span&gt;&lt;span class="taxhighlighter1-phphtmlurl"&gt;http://www.bisg.org/isbn-13/conversions.html&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;#&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;public&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;function&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; is_valid_isbn_13( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_13&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; ) {&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# If you want to strictly validate ISBN-13 numbers substitute this line of code in the IF statement:&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;br /&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpcomments"&gt;# !ereg('^((978|979)[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])$', $isbn_13)&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;br /&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;if&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;( !&lt;/span&gt;&lt;span class="taxhighlighter1-phpphpfunctions"&gt;ereg&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;(&lt;/span&gt;&lt;span class="taxhighlighter1-phpquotedstrings"&gt;'^([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])$'&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;, &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_13&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) ) {&lt;br /&gt;&lt;br /&gt;     &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;return&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpphpconstants"&gt;false&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;= &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;for&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;( &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;= &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;13&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;; &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; &amp;gt; &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;; &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;-- ) {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpoperators"&gt;+=  (&lt;/span&gt;&lt;span class="taxhighlighter1-phpphpcasting"&gt;(int)&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$isbn_13&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;{&lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;13&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; - &lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;}) * (((&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$i&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; % &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;2&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) == &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) ? &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;3&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; : &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;1&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span class="taxhighlighter1-phpreservedwords"&gt;return&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; ( (&lt;/span&gt;&lt;span class="taxhighlighter1-phpvariable"&gt;$sum&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; % &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;10&lt;/span&gt;&lt;span class="taxhighlighter1-phppunctuation"&gt;) == &lt;/span&gt;&lt;span class="taxhighlighter1-phpnumber"&gt;0&lt;/span&gt;&lt;span class="taxhighlighter1-phpwhitespace"&gt; );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span class="taxhighlighter1-phpphpanchor"&gt;?&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;drenintell&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668360022691568358-3546366685427088426?l=drenintell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drenintell.blogspot.com/feeds/3546366685427088426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668360022691568358&amp;postID=3546366685427088426' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668360022691568358/posts/default/3546366685427088426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668360022691568358/posts/default/3546366685427088426'/><link rel='alternate' type='text/html' href='http://drenintell.blogspot.com/2008/01/php-isbn-functions_21.html' title='PHP ISBN Functions'/><author><name>drenintell</name><uri>http://www.blogger.com/profile/15234354120752365220</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8668360022691568358.post-2725406443303911691</id><published>2008-01-19T17:20:00.004-05:00</published><updated>2008-02-19T10:16:34.914-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><title type='text'>JSON, AJAX, &amp; PHP</title><content type='html'>The last time I did any web programming was about a year ago. Since then a lot has changed in the programming world of web applications. For one, JSON is becoming the new data exchange protocol. Two, PHP has grown drastically. And lastly, there is AJAX - what the web is evolving around - or so I hear.&lt;br /&gt;&lt;br /&gt;Recently, I re-entered the world of web programming. After catching up on AJAX and JSON, I decided to put my knowledge of those technologies to work. I began re-writing an earlier project of mine using JSON, AJAX, and PHP. What follows are some pros, cons, tips, and bits of code I think will be useful to the programming community or those just beginning to glance these technologies.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;1. Lets talk about JSON&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;At the moment XML is the preferred data exchange protocol for *serious* web applications. Perhaps XML will remain the preferred protocol for such applications, however, for simpler applications XML is an overkill. What most web applications really need is JSON. There is no doubt in my mind that JSON will become the standard data exchange protocol for simple web applications. Compared to XML, JSON is:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Simpler to learn&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Simpler to use&lt;/li&gt;&lt;li&gt;Faster to decode &amp;amp; encode&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Smaller in size (the encoded data is smaller)&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;2. JSON and JavaScript.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There is a bit of confusion about what JSON is in the context of JavaScript. JSON on its own is basically&lt;span style="font-weight: bold;"&gt; a set of rules for representing data&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.&lt;/span&gt; Those rules however happen to be JavaScript's way of representing objects and arrays. The connection is not accidental - for JSON stands for (&lt;/span&gt;JavaScript Object Notation). However it is important to make the distinction between JSON and JavaScript. JSON in the context of JavaScript is basically a JavaScript object/array, &lt;span style="font-weight: bold;"&gt;but also JSON is a set of rules&lt;/span&gt;, and therefore a language. I find it better to think of JavaScript and JSON as two separate beasts.&lt;br /&gt;&lt;br /&gt;Using JSON in JavaScript is fairly easy. Most of the sources on the web show you how to use JavaScript's &lt;span style="font-weight: bold;"&gt;eval &lt;/span&gt;function to decode a JSON string and turn it into a JavaScript object. Though it is a valid way of doing things, I don't like using the &lt;span style="font-weight: bold;"&gt;eval &lt;/span&gt;function, especially when there is a better, secure way. Here is how:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download &lt;a href="http://www.json.org/json2.js2"&gt;&lt;span style="font-weight: bold;"&gt;json2.js&lt;/span&gt;&lt;/a&gt;. (Right-click, "Save As")&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you need docs, they are &lt;a href="http://www.json.org/js.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To use &lt;span style="font-weight: bold;"&gt;json2.js&lt;/span&gt; in your html include it via the &lt;span style="font-weight: bold;"&gt;script tag&lt;/span&gt; as you would any other *.js script.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;In a nutshell, &lt;span style="font-weight: bold;"&gt;json2.js&lt;/span&gt; has two methods. They are:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JSON.stringify()&lt;/span&gt;  which takes two parameters, the second being optional&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JSON.parse()&lt;/span&gt; also takes two parameters, the second being optional&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Here is how you use these two methods in JavaScript:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// This is a JavaScript script&lt;br /&gt;&lt;br /&gt;// I will use a JavaScript object for this example. You can also use JavaScript arrays, or a&lt;br /&gt;// combination of the two but &lt;span style="font-weight: bold;"&gt;NOT&lt;/span&gt; simple variables such as strings, or integers.&lt;br /&gt;// Keep that in mind as it is the JSON specification/standard.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;obj= new Object;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;obj["name"]= "John Smith";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;obj["email"]= "jsmith@drenintell.com";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Lets make a JSON string from the JavaScript obj object.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;json_string= JSON.stringify(obj);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Should display: {"name":"John Smith","email":"jsmith@drenintell.com"}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;alert(json_string);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Lets now reverse the process, therefore decoding the JSON string to a JavaScript object.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;js_obj= JSON.parse(json_string);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Lets output the js_obj to see that it is a JavaScript object:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;alert(js_obj);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Lets output one of the object's properties:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;alert(js_obj.name);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// End of example.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;That's it! How simple was that? Compared to &lt;span style="font-weight: bold;"&gt;eval, &lt;/span&gt;this way of doing things is way easier. First off, using &lt;span style="font-weight: bold;"&gt;JSON.stringify()&lt;/span&gt; means that you will never have to write any JSON strings yourself. Second, using JSON.parse() ensures security, for only JSON strings are parsed and decoded into a JavaScript object/array.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;3. JSON and PHP.&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;Using JSON in PHP is a breeze! It is even easier than using JSON in JavaScript. How ironic! Lets get to it:&lt;br /&gt;&lt;br /&gt;PHP5 comes with the JSON libraries already installed and enabled. There is nothing you need to really do. So straight to an example:&lt;br /&gt;&lt;br /&gt;// This is PHP script&lt;br /&gt;&lt;br /&gt;// A PHP associative array. Keep in mind that in JavaScript an associative array is actually an object.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$obj['name']= 'John Smith';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$obj['email']= 'jsmith@drenintell.com';&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Lets make a JSON string from the associative array.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$json_string= json_encode($obj);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;// Should display: {"name":"John Smith","email":"jsmith@drenintell.com"}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;echo $json_string;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Lets now reverse the process, therefore decoding the JSON string to a PHP object.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$php_obj= json_decode($json_string);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Lets use var_dump() to see all the information about the $php_obj variable.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;var_dump($php_obj);&lt;/span&gt; // Should be a &lt;span style="font-weight: bold;"&gt;PHP object&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;// Now lets decode the JSON string to a &lt;span style="font-weight: bold;"&gt;PHP associative array&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;$php_assoc_array= json_decode($json_string, true);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;// Lets do var_dump() again.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;var_dump($php_obj);&lt;/span&gt; // Should be a &lt;span style="font-weight: bold;"&gt;PHP associative array&lt;/span&gt;. A handy thing, no doubt!&lt;br /&gt;&lt;br /&gt;// End of PHP script&lt;br /&gt;&lt;br /&gt;That's it!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;4. JSON, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;AJAX&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; and PHP. (Perhaps we can call these "JAP")&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Unfortunately, AJAX code is long, and takes a great deal of patience to explain. What's also unfortunate is my lack of patience. As a result, you won't see any AJAX here. However, there are several things you should know if you are going to combine &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;JSON, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;AJAX, and PHP in a project.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;When you make a POST request via AJAX to a PHP script, the POST data is NOT stored in $_POST, but in $HTTP_RAW_POST_DATA.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;Using AJAX to submit forms complicates things for you the programmer. For one, you will have to manually get the form field value(s) yourself. But then what? Use JSON to send the form data to PHP.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Forms that submit files cannot be submitted using AJAX. This is not so much a problem with AJAX as it is with browser security. Think about it! If you can send any file via AJAX from a client's computer to a server, then what prevents a hacker from writing a malicious script to send your registry file to his server? Or better yet, your SAM file!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;With AJAX you cannot make cross domain requests. There is the "proxy script" solution but that of course means more work for you.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Some web browsers cache AJAX responses. This is often a problem. If a user is seeing the same page when they should be seeing a new page, it's like due to caching. Use PHP's header() function to send the appropriate headers to prevent caching.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you are going to use JSON, AJAX and PHP, I suggest you make all data exchange happen via JSON. In other words, use JSON for all communication between the server and the client. If you do that, you have to take into consideration the following:&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;How will PHP script errors be displayed? Normally, PHP just outputs the error(s). However, if on the client side you decode all data using JSON, PHP errors won't be displayed as they are not in a JSON format.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;How will your JavaScript functions know there was a PHP error, even if the error is in a valid JSON format? I suggest you implement a simple error handler on the client side.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;Exchanging html data using JSON is not recommenced because JSON has to escape all (") and (\) characters, plus several control characters. This happens once on the server, and once on the client. If you have to send large amounts of html using JSON, there will be a performance penalty, as extra processing will take place. &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Additionally, the size of the data transmitted over the net is larger.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Knowing the type of JSON structure your data has is a must. Otherwise, how will you iterate the JSON object(s)/array(s) in JavaScript? Consider reading &lt;a href="http://www.quirksmode.org/js/associative.html"&gt;this&lt;/a&gt; tutorial. Also take a look at the following articles:&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;http://ajaxian.com/archives/javascript-associative-arrays-considered-harmful&lt;/li&gt;&lt;li&gt;http://www.thedeveloperday.com/iterate-javascript-associative-arrays/&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-size:100%;"&gt;The lesson of this article/post is this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Do your homework first, as thoroughly as possible, then write code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;JSON is still in its infancy. Exchanging string/text data with JSON isn't a problem, but numeric values might be. There has been several problems reported with JSON's implementation in PHP, however I believe most of them are the result of miss-understanding JSON.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Success is a poor teacher, so if you have any criticism, hopefully constructive, please add a comment.&lt;br /&gt;&lt;br /&gt;Regards,&lt;br /&gt;drenintell.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8668360022691568358-2725406443303911691?l=drenintell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://drenintell.blogspot.com/feeds/2725406443303911691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8668360022691568358&amp;postID=2725406443303911691' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8668360022691568358/posts/default/2725406443303911691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8668360022691568358/posts/default/2725406443303911691'/><link rel='alternate' type='text/html' href='http://drenintell.blogspot.com/2008/01/ajax-json-and-php.html' title='JSON, AJAX, &amp; PHP'/><author><name>drenintell</name><uri>http://www.blogger.com/profile/15234354120752365220</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>
