<?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>Dawid Pośliński &#187; php</title>
	<atom:link href="http://blog.poslinski.net/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.poslinski.net</link>
	<description>Code is poetry.</description>
	<lastBuildDate>Mon, 06 Sep 2010 18:23:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Jak posprzątać HTML?</title>
		<link>http://blog.poslinski.net/jak-posprzatac-html/</link>
		<comments>http://blog.poslinski.net/jak-posprzatac-html/#comments</comments>
		<pubDate>Mon, 03 May 2010 14:18:19 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[bezpieczeństwo]]></category>
		<category><![CDATA[htmlpurifier]]></category>
		<category><![CDATA[strip_tags]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=589</guid>
		<description><![CDATA[Każdy programista webowy, stanął lub stanie przed zadaniem zablokowania możliwości wprowadzania kodu HTML do jego aplikacji przez użytkownika, który nie jest do tego uprawniony. Czasami jednak zdarza się tak, że chcemy dać możliwość użytkownikowi na wprowadzania formatowania, a nie, żeby było jak najprostsze wykorzystujemy do tego HTML. Do tego zadania, świetnie nadaje się biblioteka do [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.poslinski.net/wp-content/uploads/2010/05/jakposprzatachtml1.png"><img src="http://blog.poslinski.net/wp-content/uploads/2010/05/jakposprzatachtml1.png" alt="" title="jakposprzatachtml" width="620" height="150" class="aligncenter size-full wp-image-596" /></a>Każdy programista webowy, stanął lub stanie przed zadaniem zablokowania możliwości wprowadzania kodu HTML do jego aplikacji przez użytkownika, który nie jest do tego uprawniony. Czasami jednak zdarza się tak, że chcemy dać możliwość użytkownikowi na wprowadzania formatowania, a nie, żeby było jak najprostsze wykorzystujemy do tego HTML.<br />
<span id="more-589"></span><br />
Do tego zadania, świetnie nadaje się biblioteka do której korzystania chciałbym zachęcić. <strong>HTMLPurifier</strong> bo o niej mowa, potrafi nie tylko wyciąć zbędne tagi (co również można wykonać za pomocą wbudowanej w PHP funkcji strip_tags), ale również wyciąć zbędne atrybuty CSS (znajdujące się w atrybucie style znacznika), czy też konkretne atrybuty wewnątrz tagu.<br />
HTMLPurifier znajduje również znaczniki bez treści, zamienia adresy ftp, http, https itd. na linki, a nawet linki do serwisu YouTube kod embeddujący player Google&#8217;a. Stara się również poprawić niepoprawny kod np. poprzez samodzielne domykanie, niezamkniętych znaczników itp.<br />
Posiada również rozbudowany mechanizm cache&#8217;owania.</p>
<h2>Gdzie szukać?</h2>
<p>Polecam odwiedzić <a href="http://htmlpurifier.org">stronę projektu</a>, a w szczególności dział <a href="http://htmlpurifier.org/demo.php">demo</a>, który przedstawia namiastkę możliwości tej biblioteki. Bardzo dobrze skonstruowana dokumentacja, opisuje wszystkie funkcjonalności dostępne w tej bibliotece.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/jak-posprzatac-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Warto zobaczyć #3</title>
		<link>http://blog.poslinski.net/warto-zobaczyc-3/</link>
		<comments>http://blog.poslinski.net/warto-zobaczyc-3/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 23:31:09 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[ciekawostki]]></category>
		<category><![CDATA[inne]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[narzędzia]]></category>
		<category><![CDATA[xna]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[windows7]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=235</guid>
		<description><![CDATA[Kolejna paczka, interesujących znalezisk, z którymi warto się zaznajomić. jQuery http://jqueryfordesigners.com/ Świetna strona dla programistów korzystających z jQuery. http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/ Dobrze opisane zapytania Ajaxowe z wykorzystaniem jQuery. XNA http://pdnimporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30541 Tekstury Paint.NET do XNA. http://xnaviewer.codeplex.com/ Kontrolka, pozwalająca na korzystanie z dobrodziejstw XNA w aplikacjach typu WindowsForms. Nie trudno sobie wyobrazić zastosowanie np. przy tworzeniu map. Inne http://www.bugmenot.com [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-411" title="warto-zobaczyc-3" src="http://blog.poslinski.net/wp-content/uploads/2009/09/warto-zobaczyc-3.jpg" alt="warto-zobaczyc-3" width="620" height="150" />Kolejna paczka, interesujących znalezisk, z którymi warto się zaznajomić.</p>
<h2><span id="more-235"></span>jQuery</h2>
<p><a href="http://jqueryfordesigners.com/">http://jqueryfordesigners.com/</a><br />
Świetna strona dla programistów korzystających z jQuery.<br />
<a href="http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/">http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/</a><br />
Dobrze opisane zapytania Ajaxowe z wykorzystaniem jQuery.</p>
<h2>XNA</h2>
<p><a href="http://pdnimporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30541">http://pdnimporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30541</a><br />
Tekstury Paint.NET do XNA.<br />
<a href="http://xnaviewer.codeplex.com/" target="_blank">http://xnaviewer.codeplex.com/</a><br />
Kontrolka, pozwalająca na korzystanie z dobrodziejstw XNA w aplikacjach typu WindowsForms. Nie trudno sobie wyobrazić zastosowanie np. przy tworzeniu map.</p>
<h2>Inne</h2>
<p><a href="http://www.bugmenot.com">http://www.bugmenot.com</a><br />
Dzięki tej stronie, nie trzeba się rejestrować na różne serwisy społecznościowe, itp., aby móc w pełni przeglądać zasoby tych serwisów.<br />
<a href="http://gskinner.com/RegExr/">http://gskinner.com/RegExr/</a><br />
Świetne narzędzie ułatwiające pracę z mod_rewrite.<br />
<a href="http://www.logoinstant.com/" target="_blank">http://www.logoinstant.com/</a><br />
Darmowe wzory logo.<br />
<a href="http://code.msdn.microsoft.com/PowerCommands">http://code.msdn.microsoft.com/PowerCommands</a><br />
Przydatny dodatek do Visual Studio (za <a href="http://www.maciejaniserowicz.com/post/2009/08/31/Copypaste-reference-w-Visual-Studio.aspx" target="_blank">Procent</a>&#8216;em).<br />
<a href="http://blogs.msdn.com/danieb/archive/2009/08/26/pl-windows-7-search-connectors-czyli-integracja-wyszukiwania-z-systemem-operacyjnym.aspx" target="_blank">http://blogs.msdn.com/danieb/archive/2009/08/26/pl-windows-7-search-connectors-czyli-integracja-wyszukiwania-z-systemem-operacyjnym.aspx</a><br />
Opis jednej z nowych bardzo interesujących funkcjonalności w Windows 7.<br />
<a href="http://www.microsoft.com/downloads/details.aspx?familyid=95E24C87-8732-48D5-8689-AB826E7B8FDF&amp;displaylang=en">Word viewer</a><br />
Programik pozwala na przeglądanie dokumentów Worda, bez potrzeby posiadania pakietu Office.<br />
<a href="http://www.hanselman.com/tools">http://www.hanselman.com/tools</a><br />
Naprawdę ogromna lista różnego rodzaju narzędzi, które przydadzą się każdemu, podzielona według kategorii. Sam się zdziwiłem, jak wiele przydatnych aplikacji jeszcze nie znałem.</p>
<p>Polecam również <a href="http://www.flickr.com/photos/gzlu/">galerię prac autora</a> zdjęcia, które reprezentuje ten wpis.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/warto-zobaczyc-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Szukamy sumy i NWD</title>
		<link>http://blog.poslinski.net/php-szukamy-sumy-i-nwd/</link>
		<comments>http://blog.poslinski.net/php-szukamy-sumy-i-nwd/#comments</comments>
		<pubDate>Sat, 17 Jan 2009 19:47:38 +0000</pubDate>
		<dc:creator>Dawid Pośliński</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[algorytm]]></category>
		<category><![CDATA[gotowe rozwiązania]]></category>
		<category><![CDATA[matematyka]]></category>
		<category><![CDATA[programowanie]]></category>

		<guid isPermaLink="false">http://blog.poslinski.net/?p=103</guid>
		<description><![CDATA[Poproszono mnie o napisanie, prostej aplikacji, której działanie miało by polegać na analizie pliku wejściowego, którego linia miała by następującą składnie &#8222;liczba1 liczba2 &#8230; liczbaN&#8221;, z dowolną ilością linii o właśnie takiej składni. Celem aplikacji było by zsumowanie wszystkich składników danej linii i zapisanie sum w analogicznym pliku wyjściowym suma.txt, lub znalezienie NWD składników z [...]]]></description>
			<content:encoded><![CDATA[<p>Poproszono mnie o napisanie, prostej aplikacji, której działanie miało by polegać na analizie pliku wejściowego, którego linia miała by następującą składnie &#8222;liczba1 liczba2 &#8230; liczbaN&#8221;, z dowolną ilością linii o właśnie takiej składni. Celem aplikacji było by zsumowanie wszystkich składników danej linii i zapisanie sum w analogicznym pliku wyjściowym suma.txt, lub znalezienie NWD składników z każdej linii i również zapisanie ich w analogicznym pliku nwd.txt.</p>
<p><span id="more-103"></span></p>
<h2>Opis rozwiązania</h2>
<p>Problem nie jest skomplikowany, a jego rozwiązanie sprowadza się do kilku lini kodu.</p>
<p>W moim przypadku, pobrałem całą zawartość pliku input.txt, następnie korzystając z funkcją explode, zapisałem kolejne linie pliku do tablicy, oraz kolejne liczby z tablicy, oddzielone spacją zapisałem do tablicy dwuwymiarowej. Tym prostym sposobem, otrzymałem tablicę dwuwymiarową (ilość liczb w wierszu, może być różna) wyglądającą mniej, więcej tak:</p>
<p>linia1liczba1 linia1liczba2 &#8230; linia1liczbaN</p>
<p>linia2liczba1 linia2liczba2 &#8230; linia2liczbaN</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p>liniaNliczba1 liniaNliczba2 &#8230; liniaNliczbaN</p>
<p>Następnie zastosowałem proste algorytmy, aby w tablicy suma i nwd, znalazły się poszukiwane przez nas wyniki, które omówione są w komentarzach do kodu.</p>
<p>Całość trafia do pliku wyjściowego, dla <strong>sumy</strong>:</p>
<p>suma1linii</p>
<p>suma2linii</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;</p>
<p>sumaNlinii</p>
<p>oraz analogicznie dla <strong>NWD</strong>:</p>
<p>nwd1linii</p>
<p>nwd2linii</p>
<p>&#8230;&#8230;&#8230;&#8230;</p>
<p>nwd3linii</p>
<h2>Kod</h2>
<pre class="php" name="code">&lt;html&gt;&lt;head&gt;&lt;META http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;/head&gt;&lt;body&gt;

&lt;form method="post"&gt;
&lt;select name="tryb"&gt;
&lt;option value="suma"&gt; Zsumuj wiersze&lt;/option&gt;
&lt;option value="nwd"&gt; Znajdź największy wspólny dzielnik w wierszach&lt;/option&gt;
&lt;/select&gt;
&lt;input type="submit" value="Start" /&gt;
&lt;/form&gt;

&lt;?PHP if (file_exists("input.txt")) { ?&gt;
&lt;a href="input.txt"&gt;input.txt&lt;/a&gt;
&lt;?PHP } ?&gt;
&lt;?PHP if (file_exists("suma.txt")) { ?&gt;
&lt;a href="suma.txt"&gt;suma.txt&lt;/a&gt;
&lt;?PHP } ?&gt;
&lt;?PHP if (file_exists("nwd.txt")) { ?&gt;
&lt;a href="nwd.txt"&gt;nwd.txt&lt;/a&gt;
&lt;?PHP } ?&gt;

&lt;?PHP

$rows_array = explode("\n",file_get_contents("input.txt")); // powstanie nam tablica z wierwszami z pliku input.txt

foreach ($rows_array as $key =&gt; $value)
{
$row[$key] = explode(" ",$value); // Powstanie tablica 2 wymiarowa ( 1szy wymiar - numer wiersza, 2gi wymiar - element wiersza )
}

for ( $i=0; $i &lt; count($row); $i++ ) // będziemy sprawdzać kolejne wiersze
{
// NWD
// przykład algorytmu NWD: bierzemy dowolny element z wiersza i sprawdzamy czy nie jest dzielnnikiem,
// jeżeli nie jest schodzimy w dół o jeden, aż znajdziemy dzielenie wszystkich elementów bez reszty ( dzielenie modulo )
$nwd[$i] = $row[$i][0];

$szukam_dzielnik = true;

while ( $szukam_dzielnik )
{
$wynik = 0;

for ( $b=0; $b &lt; count($row[$i]); $b++ )
{
$wynik += ($row[$i][$b] % $nwd[$i]);
}

$nwd[$i]--; // dekrementacja

if ( $wynik == 0 ) // brak dzielenia z reszty - znaleźliśmy NWD szukając od góry
{
$szukam_dzielnik = false;
$nwd[$i]++;
}
}

// SUMA
for ( $b=0; $b &lt; count($row[$i]); $b++ )
{
$sum[$i] += $row[$i][$b]; // tablica suma będzie miała sumę kolejnych wierszy
}
}

if ( $_POST['tryb'] == "suma" )
{
$wynik = "";
foreach ( $sum as $value )
{
$wynik .= $value."\n"; // Z Tablicy sum wpisujemy do zmiennej wynik kolejne wiersze zakańczając je znakiem nowej lini
}

// ZAPIS DO PLIKU - WYMAGA UPRAWNIEŃ NA SERWERZE CHMOD 666 lub 777 gdyby nie działało
file_put_contents("suma.txt",$wynik);
// KONIEC ZAPISU
}

if ( $_POST['tryb'] == "nwd" )
{
$wynik = "";
foreach ( $nwd as $value )
{
$wynik .= $value."\n"; // Z Tablicy sum wpisujemy do zmiennej wynik kolejne wiersze zakańczając je znakiem nowej lini
}

// ZAPIS DO PLIKU - WYMAGA UPRAWNIEŃ NA SERWERZE CHMOD 666 lub 777 gdyby nie działało
file_put_contents("nwd.txt",$wynik);
// KONIEC ZAPISU
}

?&gt;

&lt;/body&gt;&lt;/html&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.poslinski.net/php-szukamy-sumy-i-nwd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
