<?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>Zend Framework Blog &#187; Zend action helpers</title>
	<atom:link href="http://blog.richardknop.com/tag/zend-action-helpers/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.richardknop.com</link>
	<description>Zend Framework, PHP, Django, Python, SQL, MySQL, PostgreSQL, Oracle, PL/SQL, data model patterns, OOP, design patterns, JavaScript, jQuery, HTML, XHTML, CSS, XML, web services &#38; APIs, Security, E-commerce and much more</description>
	<lastBuildDate>Sat, 04 Feb 2012 19:47:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Action helper that converts SQL result to XML</title>
		<link>http://blog.richardknop.com/2010/09/action-helper-that-converts-sql-result-to-xml/</link>
		<comments>http://blog.richardknop.com/2010/09/action-helper-that-converts-sql-result-to-xml/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 15:43:09 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[OOP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend action helpers]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=617</guid>
		<description><![CDATA[Here is a simple Zend Framework controller action helper that converts SQL result to XML. The SQL result should be fetched as an object or an array of objects: &#60;?php class My_Controller_Action_Helper_SqlToXml extends Zend_Controller_Action_Helper_Abstract &#123; &#160; &#160; public function direct&#40;$sqlResult, $rootElementName, $childElementName, $singleRow, $encoding = &#39;UTF-8&#39;&#41; &#160; &#160; &#123; &#160; &#160; &#160; &#160; // create [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a simple Zend Framework controller action helper that converts SQL result to XML. The SQL result should be fetched as an object or an array of objects:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> My_Controller_Action_Helper_SqlToXml <span class="kw2">extends</span> Zend_Controller_Action_Helper_Abstract</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> direct<span class="br0">&#40;</span><span class="re1">$sqlResult</span><span class="sy0">,</span> <span class="re1">$rootElementName</span><span class="sy0">,</span> <span class="re1">$childElementName</span><span class="sy0">,</span> <span class="re1">$singleRow</span><span class="sy0">,</span> <span class="re1">$encoding</span> <span class="sy0">=</span> <span class="st0">&#39;UTF-8&#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// create XML documnt &nbsp; &nbsp; &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$doc</span> <span class="sy0">=</span> <span class="kw2">new</span> DomDocument<span class="br0">&#40;</span><span class="st0">&#39;1.0&#39;</span><span class="sy0">,</span> <span class="re1">$encoding</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// insert a root element</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$root</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">createElement</span><span class="br0">&#40;</span><span class="re1">$rootElementName</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$root</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">appendChild</span><span class="br0">&#40;</span><span class="re1">$root</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// if the SQL result set contains only a singler row</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">true</span> <span class="sy0">===</span> <span class="re1">$singleRow</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$xmlData</span> <span class="sy0">.=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">rowToXml</span><span class="br0">&#40;</span><span class="re1">$doc</span><span class="sy0">,</span> <span class="re1">$root</span><span class="sy0">,</span> <span class="re1">$sqlResult</span><span class="sy0">,</span> <span class="re1">$childElementName</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// if the SQL result set is an object array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">false</span> <span class="sy0">===</span> <span class="re1">$singleRow</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$sqlResult</span> <span class="kw1">as</span> <span class="re1">$row</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$xmlData</span> <span class="sy0">.=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">rowToXml</span><span class="br0">&#40;</span><span class="re1">$doc</span><span class="sy0">,</span> <span class="re1">$root</span><span class="sy0">,</span> <span class="re1">$row</span><span class="sy0">,</span> <span class="re1">$childElementName</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// return XML string</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">saveXML</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> rowToXml<span class="br0">&#40;</span><span class="re1">$doc</span><span class="sy0">,</span> <span class="re1">$root</span><span class="sy0">,</span> <span class="re1">$row</span><span class="sy0">,</span> <span class="re1">$childElementName</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// insert a child element</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$occ</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">createElement</span><span class="br0">&#40;</span><span class="re1">$childElementName</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$occ</span> <span class="sy0">=</span> <span class="re1">$root</span><span class="sy0">-&gt;</span><span class="me1">appendChild</span><span class="br0">&#40;</span><span class="re1">$occ</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// iterate through each public object property and insert a shild element</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$row</span> <span class="kw1">as</span> <span class="re1">$property</span> <span class="sy0">=&gt;</span> <span class="re1">$value</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$child</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">createElement</span><span class="br0">&#40;</span><span class="re1">$property</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$child</span> <span class="sy0">=</span> <span class="re1">$occ</span><span class="sy0">-&gt;</span><span class="me1">appendChild</span><span class="br0">&#40;</span><span class="re1">$child</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$childValue</span> <span class="sy0">=</span> <span class="re1">$doc</span><span class="sy0">-&gt;</span><span class="me1">createTextNode</span><span class="br0">&#40;</span><span class="re1">$value</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$childValue</span> <span class="sy0">=</span> <span class="re1">$child</span><span class="sy0">-&gt;</span><span class="me1">appendChild</span><span class="br0">&#40;</span><span class="re1">$childValue</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Hope some of you will find it useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2010/09/action-helper-that-converts-sql-result-to-xml/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Implode an associative array</title>
		<link>http://blog.richardknop.com/2009/07/implode-an-associative-array/</link>
		<comments>http://blog.richardknop.com/2009/07/implode-an-associative-array/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 19:34:43 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend action helpers]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=440</guid>
		<description><![CDATA[PHP&#8217;s implode() function is commonly used to convert an array to a string. But what if you want to implode an associative array and you want both keys and values to be included in the string? For instance: // here&#39;s a fancy associative array $arr = array&#40;&#39;fruit&#39; =&#62; &#39;apple&#39;, &#160; &#160; &#160; &#160; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>PHP&#8217;s <a href="http://php.net/manual/en/function.implode.php">implode()</a> function is commonly used to convert an array to a string. But what if you want to implode an associative array and you want both keys and values to be included in the string? For instance:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// here&#39;s a fancy associative array</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$arr</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&#39;fruit&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;apple&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;vegetable&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;potato&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;pastry&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;bread&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;liquid&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;milk&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// and we want to implode it like this</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$imploded</span> <span class="sy0">=</span> <span class="st0">&#39;fruit: apple, vegetable: potato, pastry: bread, liquid: milk&#39;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>I wrote a simple Zend action helper for that purpose:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> My_Controller_Action_Helper_ImplodeAssociativeArray <span class="kw2">extends</span> Zend_Controller_Action_Helper_Abstract</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> direct<span class="br0">&#40;</span><span class="re1">$array</span><span class="sy0">,</span> <span class="re1">$separator</span> <span class="sy0">=</span> <span class="st0">&#39;: &#39;</span><span class="sy0">,</span> <span class="re1">$glue</span> <span class="sy0">=</span> <span class="st0">&#39;, &#39;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// separate the associative array into keys and values</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$keys</span> <span class="sy0">=</span> <span class="kw3">array_keys</span><span class="br0">&#40;</span><span class="re1">$array</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$values</span> <span class="sy0">=</span> <span class="kw3">array_values</span><span class="br0">&#40;</span><span class="re1">$array</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// build a new array with joined kesy and values</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$newArray</span> <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="re1">$i</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> <span class="re1">$i</span> <span class="sy0">&lt;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$keys</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="re1">$i</span><span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$newArray</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$key</span> <span class="sy0">.</span> <span class="re1">$separator</span> <span class="sy0">.</span> <span class="re1">$value</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// implode and return the new array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">implode</span><span class="br0">&#40;</span><span class="re1">$glue</span><span class="sy0">,</span> <span class="re1">$newArray</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>To verify that it works:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&gt;</span>_helper<span class="sy0">-&gt;</span><span class="me1">implodeAssociativeArray</span><span class="br0">&#40;</span><span class="re1">$arr</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="re1">$imploded</span><span class="br0">&#41;</span> ? <span class="sy0">:</span> <span class="st0">&#39;yes&#39;</span> <span class="sy0">:</span> <span class="st0">&#39;no&#39;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2009/07/implode-an-associative-array/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Strip unwanted tags and attributes from XHTML</title>
		<link>http://blog.richardknop.com/2009/07/strip-unwanted-tags-and-attributes-from-xhtml/</link>
		<comments>http://blog.richardknop.com/2009/07/strip-unwanted-tags-and-attributes-from-xhtml/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 17:46:36 +0000</pubDate>
		<dc:creator>Richard Knop</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend action helpers]]></category>

		<guid isPermaLink="false">http://blog.richardknop.com/?p=430</guid>
		<description><![CDATA[Have you ever experienced strange tags and attributes in XHTML markup produced by a rich text editor? And were you sure the rich text editor doesn&#8217;t produce those tags on its own? The answer to this mysterious behaviour is: MS Word. Many users will just copy and paste a text from Word documents unaware of [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever experienced strange tags and attributes in XHTML markup produced by a rich text editor? And were you sure the rich text editor doesn&#8217;t produce those tags on its own?</p>
<p>The answer to this mysterious behaviour is: MS Word. Many users will just copy and paste a text from Word documents unaware of a fact that the text comes with garbage XHTML tags and attributes only the Word uses.</p>
<p>I wrote a Zend action helper that strips all unwanted tags and attributes from an XHTML markup. All credit goes to <a href="http://www.php.net/manual/en/function.strip-tags.php#89967">nick&#8217;s comment</a> in PHP&#8217;s <a href="http://php.net/manual/en/function.strip-tags.php">strip_tags()</a> function documentation:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> My_Controller_Action_Helper_StripTagsAttributes <span class="kw2">extends</span> Zend_Controller_Action_Helper_Abstract</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> direct<span class="br0">&#40;</span><span class="re1">$string</span><span class="sy0">,</span> <span class="re1">$allowedTags</span> <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">,</span> <span class="re1">$allowedAttributes</span> <span class="sy0">=</span> <span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$allowedAttributes</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re1">$allowedAttributes</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$allowedAttributes</span> <span class="sy0">=</span> <span class="kw3">explode</span><span class="br0">&#40;</span><span class="st0">&#39;,&#39;</span><span class="sy0">,</span> <span class="re1">$allowedAttributes</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re1">$allowedAttributes</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$allowedAttributes</span> <span class="sy0">=</span> <span class="kw3">implode</span><span class="br0">&#40;</span><span class="st0">&#39;|&#39;</span><span class="sy0">,</span> <span class="re1">$allowedAttributes</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$rep</span> <span class="sy0">=</span> <span class="st0">&#39;/([^&gt;]*) (&#39;</span> <span class="sy0">.</span> <span class="re1">$allowedAttributes</span> <span class="sy0">.</span> <span class="st0">&#39;)(=)(<span class="es0">\&#39;</span>.*<span class="es0">\&#39;</span>|&quot;.*&quot;)/i&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$string</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="re1">$rep</span><span class="sy0">,</span> <span class="st0">&#39;$1 $2_-_-$4&#39;</span><span class="sy0">,</span> <span class="re1">$string</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw3">preg_match</span><span class="br0">&#40;</span><span class="st0">&#39;/([^&gt;]*) (.*)(=<span class="es0">\&#39;</span>.*<span class="es0">\&#39;</span>|=&quot;.*&quot;)(.*)/i&#39;</span><span class="sy0">,</span> <span class="re1">$string</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$string</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st0">&#39;/([^&gt;]*) (.*)(=<span class="es0">\&#39;</span>.*<span class="es0">\&#39;</span>|=&quot;.*&quot;)(.*)/i&#39;</span><span class="sy0">,</span> <span class="st0">&#39;$1$4&#39;</span><span class="sy0">,</span> <span class="re1">$string</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$rep</span> <span class="sy0">=</span> <span class="st0">&#39;/([^&gt;]*) (&#39;</span> <span class="sy0">.</span> <span class="re1">$allowedAttributes</span> <span class="sy0">.</span> <span class="st0">&#39;)(_-_-)(<span class="es0">\&#39;</span>.*<span class="es0">\&#39;</span>|&quot;.*&quot;)/i&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$allowedAttributes</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$string</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="re1">$rep</span><span class="sy0">,</span> <span class="st0">&#39;$1 $2=$4&#39;</span><span class="sy0">,</span> <span class="re1">$string</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw3">strip_tags</span><span class="br0">&#40;</span><span class="re1">$string</span><span class="sy0">,</span> <span class="re1">$allowedTags</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>How to use it:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* this will strip all tags except of</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* &lt;p&gt;, &lt;strong&gt;, &lt;em&gt;, &lt;ul&gt;, &lt;ol&gt;, &lt;li&gt;, &lt;a&gt;, &lt;h1&gt;, &lt;h2&gt; alt &lt;h3&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* and al attributes except</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* href, src and alt from the $xhtml variable</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$xhtml</span> <span class="sy0">=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span>_helper<span class="sy0">-&gt;</span><span class="me1">stripTagsAttributes</span><span class="br0">&#40;</span><span class="re1">$xhtml</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;ul&gt;&lt;ol&gt;&lt;li&gt;&lt;a&gt;&lt;h1&gt;&lt;h2&gt;&lt;h3&gt;&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#39;href,src,alt&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Finaly, I strongly recommend using <a href="http://htmlpurifier.org/">HTML Purifier</a> as a means of protection against cross-site scripting (often referred to as XSS).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.richardknop.com/2009/07/strip-unwanted-tags-and-attributes-from-xhtml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

