<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Weblog van Gerrit Veldman - Webdesign</title>
    <link>http://www.gerritveldman.nl/weblog/</link>
    <description></description>
    <dc:language>nl</dc:language>
    <generator>Serendipity 1.4.1 - http://www.s9y.org/</generator>
    <pubDate>Wed, 23 Sep 2009 10:00:00 GMT</pubDate>

    <image>
        <url>http://www.gerritveldman.nl/images/favicon.gif</url>
        <title>RSS: Weblog van Gerrit Veldman - Webdesign - </title>
        <link>http://www.gerritveldman.nl/weblog/</link>
        <width>40</width>
        <height>40</height>
    </image>

<item>
    <title>Adder onder het gras bij de PHP-functie strpos()</title>
    <link>http://www.gerritveldman.nl/weblog/archives/83-Adder-onder-het-gras-bij-de-PHP-functie-strpos.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/83-Adder-onder-het-gras-bij-de-PHP-functie-strpos.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=83</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=83</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    Er zijn verschillende methoden om in PHP te controleren of een bepaald teken voorkomt in een string. De meeste logische is via preg_match(), maar dat is meteen ook een heel zware en (als je niet zoveel ervaring hebt met reguliere expressies) ook een lastige. Veel gemakkelijker is strpos(). Er zit daarbij echter wel een flinke adder onder het gras. Deze functie is namelijk niet bedoelt om te achterhalen óf een teken voorkomt, waar wáár hij voorkomt. De volgende code kan daarom tot problemen leiden:&lt;br /&gt;
if (strpos($string,&#039;a&#039;)) {&lt;br /&gt;
//&lt;br /&gt;
}&lt;br /&gt;
Zolang de &#039;a&#039; niet het eerste teken in de string is, is er geen probleem. Maar stel dat de string begint met een &#039;a&#039;. Wat levert strpos() dan op? &#039;0&#039; (nul). En dus wordt er niet aan de conditie voldaan terwijl de &#039;a&#039; wel voorkomt. En dat is natuurlijk niet de bedoeling.&lt;br /&gt;
&lt;br /&gt;
Oplossing:&lt;br /&gt;
&lt;br /&gt;
if (strpos($string,&#039;a&#039;) !== false) {&lt;br /&gt;
//&lt;br /&gt;
}&lt;br /&gt;
Nu wordt er wel aan de conditie voldaan als de string begint met een &#039;a&#039;.&lt;br /&gt;
&lt;br /&gt;
Dit illustreert maar weer eens hoe belangrijk het is om altijd goed na te denken of je bij een controle verschil moet maken tussen een nul, een lege string en false. Vaak hoeft dat niet. Soms wel. 
    </content:encoded>

    <pubDate>Wed, 23 Sep 2009 12:00:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/83-guid.html</guid>
    <category>php</category>
<category>webdesign</category>

</item>
<item>
    <title>MySqli en sessies opslaan in database</title>
    <link>http://www.gerritveldman.nl/weblog/archives/80-MySqli-en-sessies-opslaan-in-database.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/80-MySqli-en-sessies-opslaan-in-database.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=80</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=80</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    Voor &lt;a href=&quot;http://www.familytreephp.com&quot;&gt;Family Tree PHP&lt;/a&gt; stapte ik een tijd geleden over van de MySql-extensie naar de MySqli-extensie van PHP. Eén van de problemen die ik daarbij tegenkwam, was dat de sessies opeens niet meer werden opgeslagen. Het duurde even voor ik door had waar dat aan lag. Al eerder had ik de manier waarop PHP standaard sessies opslaat zodanig aangepast, dat de sessies nu in de database werden opgeslagen. Met de MySql-extensie werkte dat zonder problemen, maar bij de MySqli-extensie ging dat in eerste instantie fout.&lt;br /&gt;
&lt;br /&gt;
Nu gebruikte ik de object-georiënteerde versie van MySqli. Daardoor functioneerde MySqli als een class en daar bleek uiteindelijk het probleem te zitten. De class werd door PHP afgesloten voordat PHP probeerde om de sessie op te slaan. Het gevolg was dat toen de sessie opgeslagen moest worden, de databaseverbinding al gesloten was en de sessie dus niet meer kon worden opgeslagen.&lt;br /&gt;
&lt;br /&gt;
De oplossing was om zelf aan het einde van het script expliciet aan te geven dat PHP de sessie moet opslaan, zodat dit gebeurt voordat de databaseverbinding wordt gesloten. Hiervoor is de functie session_write_close();&lt;br /&gt;
&lt;br /&gt;
Maar nu ontstond er een nieuw probleem. Her en der in het script gebruikte ik exit() of die() om de werking voortijdig te stoppen. In die al gevallen moest ik nu ook handmatig de sessie laten opslaan, omdat anders het oude probleem bleef bestaan.&lt;br /&gt;
&lt;br /&gt;
Daarvoor maakte ik mijn eigen functie stop():&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;function stop($message = &#039;&#039;) {&lt;br /&gt;
	session_write_close();&lt;br /&gt;
	exit($message);&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Door nu &lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;exit(&quot;bericht&quot;);&lt;/code&gt; &lt;br /&gt;
te vervangen door &lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;stop(&quot;bericht&quot;);&lt;/code&gt; &lt;br /&gt;
werkte alles weer naar behoren.&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sat, 12 Sep 2009 09:56:53 +0200</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/80-guid.html</guid>
    <category>mysqli</category>
<category>php</category>
<category>sessies</category>
<category>webdesign</category>

</item>
<item>
    <title>NIEUW: Family Tree PHP</title>
    <link>http://www.gerritveldman.nl/weblog/archives/75-NIEUW-Family-Tree-PHP.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/75-NIEUW-Family-Tree-PHP.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=75</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=75</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    &lt;a href=&#039;http://www.familytreephp.com&#039; target=&quot;_blank&quot;&gt;&lt;img width=&quot;130&quot; height=&quot;130&quot; style=&quot;float: right; border: 0px; padding-left: 5px; padding-right: 5px;&quot;  src=&quot;http://www.gerritveldman.nl/weblog/uploads/ftphp.png&quot; alt=&quot;Family Tree PHP - een gratis php-script voor het weergeven van stambomen&quot; /&gt;&lt;/a&gt;Sinds vorige week gebruik ik op mijn website een &lt;a href=&quot;http://www.gerritveldman.nl/weblog/archives/73-Nieuwe-genealogische-database.html&quot;&gt;nieuw pakket&lt;/a&gt; voor mijn genealogische database. Dit pakket heb ik zelf ontwikkeld en vanaf nu is het ook beschikbaar voor anderen onder de naam &lt;strong&gt;Family Tree PHP&lt;/strong&gt;. Family Tree PHP gebruikt de scripttaal php om gedcom-bestanden te importeren in een MySql-database. Elke keer als een bezoeker een pagina opvraagt, wordt deze dynamische aangemaakt vanuit de database. Als je je website wilt bijwerken, hoef je alleen maar een nieuw gedcom-bestand te importeren.&lt;br /&gt;
&lt;br /&gt;
Natuurlijk bestaan er al een aantal andere php-scripts die ongeveer hetzelfde doen. Waarom dan dit nieuwe script? Nou, in de eerste plaats omdat ik het erg leuk vond om het te ontwikkelen. In de tweede plaats omdat ik mijn programmeervaardigheden wilde verbeteren. En in de derde plaats omdat ik niet tevreden was met de bestaande scripts. Ze hebben veel mogelijkheden, maar ik wilde een script dat precies deed wat ik wilde.&lt;br /&gt;
&lt;br /&gt;
Ik heb me geconcentreerd op drie punten waarop ik wilde dat dat pakket zich zou onderscheiden:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;ik wilde dat het volledig aanpasbaar zou zijn aan de wensen van de gebruiker (dus wilde ik een uitgebreid template-systeem),&lt;/li&gt;&lt;li&gt;ik wilde dat het heel gemakkelijk te gebruiken zou zijn (zowel voor website-eigenaren als voor bezoekers),&lt;/li&gt;&lt;li&gt;ik wilde dat de gebruikers absolute controle zouden hebben over welke gegevens te zien zouden zijn voor welke gebruikers.&lt;/li&gt;&lt;/ul&gt;U kunt het script downloaden op de website van &lt;a href=&quot;http://www.familytreephp.com&quot;&gt;Family Tree PHP&lt;/a&gt;. Daar kunt u ook een lijst met alle mogelijkheden vinden. Nieuwe mogelijkheden zullen in de nabije toekomst worden toegevoegd, want de ontwikkeling gaat gewoon door. 
    </content:encoded>

    <pubDate>Sat, 21 Mar 2009 12:00:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/75-guid.html</guid>
    <category>familytreephp</category>
<category>gedcom</category>
<category>genealogie</category>
<category>php</category>
<category>webdesign</category>

</item>
<item>
    <title>Zoekmachine-optimalisatie: een globaal overzicht</title>
    <link>http://www.gerritveldman.nl/weblog/archives/69-Zoekmachine-optimalisatie-een-globaal-overzicht.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/69-Zoekmachine-optimalisatie-een-globaal-overzicht.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=69</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=69</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    Welke factoren bepalen hoe hoog een website scoort in de zoekresultaten van Google en andere zoekmachines? Hoe kun je die factoren beïnvloeden? Hier volgt een globaal overzicht:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Een webpagina moet &lt;b&gt;doorzoekbaar&lt;/b&gt; zijn voor robots&lt;br /&gt;
     &lt;ul&gt;&lt;br /&gt;
     &lt;li&gt;Gebruik geldige html of xhtml&lt;br /&gt;
     &lt;li&gt;Alle pagina&#039;s moeten te bereiken zijn via gewone html of xhtml, dus zonder javascript en flash oid.&lt;br /&gt;
     &lt;li&gt;Gebruik een sitemap&lt;br /&gt;
     &lt;li&gt;Gebruik zoekmachine-vriendelijke url&#039;s (dus zonder ? en &amp;amp; tekens)&lt;br /&gt;
     &lt;/ul&gt;&lt;br /&gt;
&lt;li&gt;Een webpagina moet &lt;b&gt;relevant&lt;/b&gt; zijn&lt;br /&gt;
    &lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;Relevante zoekwoorden moeten voorkomen in de tekst van de webpagina (maar niet overdrijven)&lt;br /&gt;
    &lt;li&gt;Relevante zoekwoorden moeten voorkomen tussen de title-tags, h1-, h2-, h3- en andere kop-tags, tussen strong- en em-tags (of b- en i-tags) en tussen a-tags (dus geen links waarbij je moet klikken op &#039;klik hier&#039;).&lt;br /&gt;
    &lt;li&gt;Relevante zoekwoorden moeten voorkomen in alt- en title-attributen van bv. a- en img-tags&lt;br /&gt;
    &lt;li&gt;Relevante zoekwoorden moeten voorkomen in meta-tags&lt;br /&gt;
    &lt;li&gt;Er moet voldoende tekst op de pagina staan (hoe meer hoe beter)&lt;br /&gt;
    &lt;li&gt;Hoe meer unieke pagina&#039;s een website heeft, hoe beter&lt;br /&gt;
    &lt;/ul&gt;&lt;br /&gt;
&lt;li&gt;Een webpagina moet &lt;b&gt;actueel&lt;/b&gt; zijn&lt;br /&gt;
    &lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;De inhoud moet regelmatig worden aangepast&lt;br /&gt;
    &lt;li&gt;Gebruik een RSS-feed&lt;br /&gt;
    &lt;/ul&gt;&lt;br /&gt;
&lt;li&gt;Een webpagina moet &lt;b&gt;uniek&lt;/b&gt; zijn&lt;br /&gt;
    &lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;De inhoud van de webpagina of belangrijke delen daarvan mogen niet voorkomen op webpagina&#039;s met een andere url (dus geen &lt;i&gt;duplicate content&lt;/i&gt;).&lt;br /&gt;
    &lt;li&gt;De title- en relevante meta-tags van elke pagina moeten uniek zijn&lt;br /&gt;
    &lt;/ul&gt;&lt;br /&gt;
&lt;li&gt;Een webpagina moet een goede &lt;b&gt;reputatie&lt;/b&gt; hebben&lt;br /&gt;
    &lt;ul&gt;&lt;br /&gt;
    &lt;li&gt;Hoe meer links op andere websites, hoe beter (vooral op websites die zelf op relevante zoekwoorden goed scoren in de zoekresultaten)&lt;br /&gt;
    &lt;li&gt;Hoe langer een website bestaat, hoe beter hij scoort&lt;br /&gt;
    &lt;/ul&gt;&lt;br /&gt;
&lt;/ul&gt; 
    </content:encoded>

    <pubDate>Thu, 06 Nov 2008 12:00:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/69-guid.html</guid>
    <category>seo</category>

</item>
<item>
    <title>Domein-aliassen en duplicate content</title>
    <link>http://www.gerritveldman.nl/weblog/archives/68-Domein-aliassen-en-duplicate-content.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/68-Domein-aliassen-en-duplicate-content.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=68</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=68</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    Veel websites zijn onder meerdere domeinnamen te bereiken. Bijvoorbeeld via domeinnaam.nl, domeinnaam.com en domeinnaam.eu. Het gevolg is dat er eigenlijk meerdere websites bestaan met exact dezelfde inhoud. Google en andere zoekmachines waarderen zulke websites lager vanwege &lt;i&gt;duplicate content&lt;/i&gt;. Deze websites scoren daardoor slechter in de zoekresultaten. Hoe voorkom je dat? De beste oplossing is om 1 domeinnaam te kiezen en bezoekers van de andere domeinnaam via een redirect door te sluizen naar de gekozen domeinnaam. Maar hoe doe je dat als al die domeinnamen gekoppeld zijn aan hetzelfde hostingaccount? Dat kan op twee manieren. En passant meteen ook een oplossing voor het verschijnsel dat zoekmachines ook www.domeinnaam.nl en domeinnaam.nl als twee verschillende sites beschouwen.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Via een .htaccess-bestand&lt;/h3&gt;&lt;br /&gt;
Open het bestand .htaccess dat in de rootmap van de website staat. Staat er nog geen bestand .htaccess open dan een nieuw bestand in bv. Windows Kladblok, sla het op als .htaccess en plaats het in de rootmap van de website. Zet in dit bestand de volgende code:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;Options +FollowSymLinks&lt;br /&gt;
RewriteEngine On&lt;br /&gt;
RewriteCond %{HTTP_HOST} domeinnaam.com [nc]&lt;br /&gt;
RewriteRule (.*) http://www.domeinnaam.nl/$1 [R=301,L]&lt;br /&gt;
RewriteCond %{HTTP_HOST} domeinnaam.eu [nc]&lt;br /&gt;
RewriteRule (.*) http://www.domeinnaam.nl/$1 [R=301,L]&lt;br /&gt;
RewriteCond %{HTTP_HOST} ^domeinnaam.nl [nc]&lt;br /&gt;
RewriteRule (.*) http://www.domeinnaam.nl/$1 [R=301,L]&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Via PHP&lt;/h3&gt;&lt;br /&gt;
Plaats bovenin het PHP-script de volgende code:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;if (strstr($_SERVER[&#039;HTTP_HOST&#039;],&quot;domeinnaam.com&quot;) || strstr($_SERVER[&#039;HTTP_HOST&#039;],&quot;domeinnaam.eu&quot;) || !strstr($_SERVER[&#039;HTTP_HOST&#039;],&quot;www.&quot;)) {&lt;br /&gt;
	header(&quot;HTTP/1.1 301 Moved Permanently&quot;); &lt;br /&gt;
	header(&quot;Location: http://www.domeinnaam.nl&quot;.$_SERVER[&#039;REQUEST_URI&#039;]);&lt;br /&gt;
	exit;&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Thu, 30 Oct 2008 12:00:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/68-guid.html</guid>
    <category>htaccess</category>
<category>php</category>
<category>seo</category>
<category>zoekmachine</category>

</item>
<item>
    <title>Problemen met UTF-8 en de BOM: een extra witregel</title>
    <link>http://www.gerritveldman.nl/weblog/archives/66-Problemen-met-UTF-8-en-de-BOM-een-extra-witregel.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/66-Problemen-met-UTF-8-en-de-BOM-een-extra-witregel.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=66</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=66</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    Een tijdje geleden had ik bij één van mijn websites een probleem. In een aantal browsers (waaronder Internet Explorer én Firefox) werd er een extra witregel toegevoegd bovenaan de pagina. Na lang zoeken bleek dit veroorzaakt te zijn door een zogenaamde BOM. Een BOM (Byte Order Mark) is een code die in vrijwel alle tekstverwerkers (ook in Windows Kladblok) wordt toegevoegd aan een bestand in UTF-8 codering. Deze code leidt bij webpagina&#039;s gemakkelijk tot problemen. Een bekend probleem is in PHP. Als je HTTP-headerinformatie wilt versturen naar de browser moet dat gebeuren vóór de gewone pagina-uitvoer. Is het PHP-bestand in UTF-8 en bevat het een BOM, dan wordt die als eerste verstuurd en mislukt het verzenden van de headerinformatie. Over dat probleem is veel op internet te vinden en als oplossing had ik bedacht dat ik alle uitvoer met een include invoegde in het basisbestand. Het basisbestand stond niet in UTF-8, het include-bestand wel. De BOM werd dan pas verzonden ná de headerinformatie.&lt;br /&gt;
&lt;br /&gt;
Maar over het probleem van de witregel kon ik weinig vinden. Pas na lang zoeken ontdekte ik dus dat ook dit veroorzaakt werd door de BOM. De oplossing: de BOM verwijderen. &lt;i&gt;Kan dat dan?&lt;/i&gt; dacht ik. Ja dus. Maar niet in alle tekstverwerkers. Windows Kladblok bijvoorbeeld kan het niet. Uiteindelijk kwam ik uit bij het opensource-programma &lt;a href=&quot;http://notepad-plus.sourceforge.net&quot;  target=&quot;_blank&quot;&gt;Notepad++&lt;/a&gt;. Dat programma biedt de mogelijkheid om bij UTF-8 te kiezen uit opslaan met en opslaan zonder BOM. 
    </content:encoded>

    <pubDate>Wed, 22 Oct 2008 12:00:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/66-guid.html</guid>
    <category>browser</category>
<category>notepad++</category>
<category>php</category>
<category>utf8</category>

</item>
<item>
    <title>Nieuwe site gemaakt voor Minne Veldman</title>
    <link>http://www.gerritveldman.nl/weblog/archives/65-Nieuwe-site-gemaakt-voor-Minne-Veldman.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/65-Nieuwe-site-gemaakt-voor-Minne-Veldman.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=65</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=65</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    &lt;a href=&#039;http://www.minneveldman.nl&#039;&gt;&lt;img width=&#039;110&#039; height=&#039;83&#039; style=&quot;float: right; border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://www.gerritveldman.nl/weblog/uploads/minneveldmansite.serendipityThumb.jpg&quot; alt=&quot;&quot; target=&quot;_blank&quot; /&gt;&lt;/a&gt;De afgelopen tijd heb ik een nieuwe website gemaakt voor mijn broer, de musicus &lt;a href=&quot;http://www.minneveldman.nl&quot; target=&quot;_blank&quot;&gt;Minne Veldman&lt;/a&gt;. De techniek achter de website is gelijk gebleven, maar de layout is nieuw.  
    </content:encoded>

    <pubDate>Fri, 17 Oct 2008 12:00:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/65-guid.html</guid>
    <category>organist</category>
<category>webdesign</category>

</item>
<item>
    <title>CSS: browser probleem met achtergrondafbeelding in een tabelrij</title>
    <link>http://www.gerritveldman.nl/weblog/archives/61-CSS-browser-probleem-met-achtergrondafbeelding-in-een-tabelrij.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/61-CSS-browser-probleem-met-achtergrondafbeelding-in-een-tabelrij.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=61</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=61</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    Laatst probeerde ik bij een tabel de rijen om en om een aparte achtergrond te geven. De ene rij wit, de volgende rij een afbeelding. Als afbeelding gebruikte ik een gradiënt. Dit bleek echter alleen te werken in Firefox en Safari. Internet Explorer en Opera gaven niet de rij, maar elke cel in de rij apart de afbeelding als achtergrond. Het gevolg was dat de gradiënt niet meer doorliep, maar in elke kolom steeds opnieuw begon. Uiteindelijk bedacht ik een oplossing. De oorspronkelijke opzet was:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;table { background: #fff; }&lt;br /&gt;
tr.alt { background: url(gradient.jpg); }&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
En dan als HTML:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;table&gt;&lt;br /&gt;
&amp;lt;tr class=&quot;alt&quot;&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;
&amp;lt;tr&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;
&amp;lt;tr class=&quot;alt&quot;&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;
&amp;lt;tr&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;
&amp;lt;/table&gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Op die manier kreeg de tabel als geheel een witte achtergrond. En om en om kreeg één rij de gradiënt als achtergrond. Dit draaide ik echter om. De gradënt werd de achtergrond van de hele tabel. En om en om kreeg één rij een witte achtergrond.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;table { background: url(gradient.jpg); }&lt;br /&gt;
tr.alt table { background: #fff; }&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
HTML:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;table&gt;&lt;br /&gt;
&amp;lt;tr&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;
&amp;lt;tr class=&quot;alt&quot;&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;
&amp;lt;tr&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;
&amp;lt;tr class=&quot;alt&quot;&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;td&gt;&amp;lt;/td&gt;&amp;lt;/tr&gt;&lt;br /&gt;
&amp;lt;/table&gt;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Zo werkte het in alle browsers. Maar dit werkte natuurlijk alleen omdat ik één rij een egale kleur gaf. Wanneer ook die rij een gradiënt moest hebben, maar dan van een andere kleur, zou ik geen oplossing geweten hebben. Zo zie je maar weer dat niet alle browsers zich aan de standaard houden. En dat Internet Explorer bij degenen hoort die het fout doen, is natuurlijk geen verrassing... 
    </content:encoded>

    <pubDate>Tue, 12 Aug 2008 12:00:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/61-guid.html</guid>
    <category>css</category>
<category>webdesign</category>

</item>
<item>
    <title>Favicon weergeven op een webpagina via PHP</title>
    <link>http://www.gerritveldman.nl/weblog/archives/52-Favicon-weergeven-op-een-webpagina-via-PHP.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/52-Favicon-weergeven-op-een-webpagina-via-PHP.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=52</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=52</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    Steeds meer websites gebruiken favicons van externe websites en geven die weer bij links naar die websites. Hoe werkt dat? Een handleiding. Om te beginnen moeten we het favicon van de andere website ophalen en converteren in een ander afbeeldingsbestandsformaat. De meeste browsers kunnen bestanden van het formaat .ico namelijk niet in een internetpagina weergeven. We moeten daarvoor de volgende stappen doorlopen:&lt;br /&gt;
&lt;br /&gt;
1. Het favicon ophalen en op de eigen server zetten in een tijdelijk bestand.&lt;br /&gt;
2. Het tijdelijke bestand converteren naar bv. een .png bestand.&lt;br /&gt;
3. Het tijdelijke bestand weer verwijderen.&lt;br /&gt;
&lt;br /&gt;
We gebruiken hiervoor PHP en ImageMagick.&lt;br /&gt;
&lt;br /&gt;
Een voorbeeld. Stel, we willen een favicon weergeven bij een link naar http://www.domein.nl/map/pagina.htm. De favicon bevindt zich als het goed is op http://www.domein.nl/favicon.ico. We willen het op onze eigen server plaatsen als &#039;map/nieuw.png&#039;. Het tijdelijke bestand wordt &#039;map/tijdelijk.ico&#039;. Verder gebruiken we een alternatieve afbeelding op de eigen server &#039;map/alternatief.png&#039; dat wordt gebruikt als het ophalen van het favicon mislukt. Dit kan bijvoorbeeld een volledige transparante pixel zijn.&lt;br /&gt;
&lt;br /&gt;
Eerst plaatsen we deze adressen in variabelen. Het adres van het externe favicon leiden we daarbij af uit het adres van de link waar het uiteindelijk bij moet komen te staan. Op die manier is het script op alle mogelijke links toe te passen, zolang het favicon maar als &#039;favicon.ico&#039; in de rootmap van de externe site staat. Je kunt de link natuurlijk ook uit een database halen en voor de namen van het tijdelijke en het nieuwe bestand het id van de link uit de database gebruiken (bijvoorbeeld: &#039;/map/&#039;.$id .&#039;.ico&#039; en &#039;/map/&#039;.$id.&#039;.png&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;$link = &#039;http://www.domein.nl/map/pagina.htm&#039;;&lt;br /&gt;
$tijdelijk = $_SERVER(&#039;DOCUMENT_ROOT&#039;) . &#039;/map/tijdelijk.ico&#039;;&lt;br /&gt;
$nieuw = $_SERVER(&#039;DOCUMENT_ROOT&#039;) . &#039;/map/nieuw.png&#039;;&lt;br /&gt;
$alt = $_SERVER(&#039;DOCUMENT_ROOT&#039;) . &#039;/map/alternatief.png&#039;;&lt;br /&gt;
&lt;br /&gt;
$favicon = str_replace(&#039;http://&#039;,&#039;&#039;,$link);&lt;br /&gt;
$favicon = explode(&#039;/&#039;,$favicon);&lt;br /&gt;
$favicon = &#039;http://&#039;. $favicon[0] . &#039;/favicon.ico&#039;;&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Vervolgens moeten we het favicon ophalen en op de eigen server plaatsen. Denk er om dat de map waarin je het bestand plaatst schrijfrechten moet hebben.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;$copy = 0;&lt;br /&gt;
$copy = copy($favicon, $tijdelijk);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Vervolgens moet het bestand dat op de server geplaatst is geconverteerd worden. Dit gebeurt via het programma ImageMagick. &#039;/usr/bin&#039; is het adres van ImageMagick op de server en &#039;/convert&#039; de functie die gebruikt wordt. Maar eerst controleren we of het ophalen wel gelukt is.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;if ($copy) {&lt;br /&gt;
exec(&quot;/usr/bin/convert $tijdelijk[0] -resize 16x16 $nieuw&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Is het ophalen niet gelukt, dan gebruiken we de alternatieve afbeelding.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;else {&lt;br /&gt;
exec(&quot;/usr/bin/convert $alt -resize 16x16 $nieuw&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Nu is het mogelijk dat het converteren mislukt is en daarom voeren we nogmaals een controle uit en gebruiken we zo nodig nogmaals de alternatieve afbeelding.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;if (!file_exists($nieuw)) {&lt;br /&gt;
exec(&quot;/usr/bin/convert $alt -resize 16x16 $nieuw&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Tenslotte wordt het tijdelijke bestand weer verwijderd.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;unlink($tijdelijk);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Klaar! Je kunt het bestand &#039;map/nieuw.png&#039; nu weergeven in de uit te voeren pagina.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;echo(&quot;&amp;lt;a href=\&quot;$link\&quot;&gt;&amp;lt;img src=\&quot;$nieuw\&quot; /&gt;&amp;lt;/a&gt; &amp;lt;a href=\&quot;$link\&quot;&gt;$link&amp;lt;/a&gt;&quot;);&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Het is natuurlijk niet verstandig om dit hele script elke keer uit te voeren als het favicon moet worden weergegeven. Eén keer is voldoende. Daarom plaatsen we het ophalen en converteren in een controle structuur en kijken we eerst of het bestand &#039;nieuw.png&#039; al bestaat.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;if (!file_exists($nieuw)) {&lt;br /&gt;
// script&lt;br /&gt;
}&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Dit script werkt alleen wanneer ImageMagick op de server is geïnstalleerd én wanneer het gebruik van de functie copy() voor externe bestanden is toegestaan voor PHP. Vooral het laatste is lang niet altijd het geval.&lt;br /&gt;
&lt;br /&gt;
Tot slot het hele script nog een keer:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;?php&lt;br /&gt;
$link = &#039;http://www.domein.nl/map/pagina.htm&#039;;&lt;br /&gt;
$nieuw = $_SERVER(&#039;DOCUMENT_ROOT&#039;) . &#039;/map/nieuw.png&#039;;&lt;br /&gt;
$tijdelijk = $_SERVER(&#039;DOCUMENT_ROOT&#039;) . &#039;/map/tijdelijk.ico&#039;;&lt;br /&gt;
$alt = $_SERVER(&#039;DOCUMENT_ROOT&#039;) . &#039;/map/alternatief.png&#039;;&lt;br /&gt;
&lt;br /&gt;
if (!file_exists($nieuw)) {&lt;br /&gt;
$favicon = str_replace(&#039;http://&#039;,&#039;&#039;,$link);&lt;br /&gt;
$favicon = explode(&#039;/&#039;,$favicon);&lt;br /&gt;
$favicon = &#039;http://&#039;. $favicon[0] . &#039;/favicon.ico&#039;;&lt;br /&gt;
&lt;br /&gt;
$copy = 0;&lt;br /&gt;
$copy = copy($favicon, $tijdelijk);&lt;br /&gt;
&lt;br /&gt;
if ($copy) {&lt;br /&gt;
exec(&quot;/usr/bin/convert $tijdelijk[0] -resize 16x16 $nieuw&quot;);&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
exec(&quot;/usr/bin/convert $alt -resize 16x16 $nieuw&quot;);&lt;br /&gt;
}&lt;br /&gt;
if (!file_exists($nieuw)) {&lt;br /&gt;
exec(&quot;/usr/bin/convert $alt -resize 16x16 $nieuw&quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unlink($tijdelijk);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo(&quot;&amp;lt;a href=\&quot;$link\&quot;&gt;&amp;lt;img src=\&quot;$nieuw\&quot; /&gt;&amp;lt;/a&gt; &amp;lt;a href=\&quot;$link\&quot;&gt;$link&amp;lt;/a&gt;&quot;);&lt;br /&gt;
?&gt;&lt;br /&gt;
&lt;/code&gt; 
    </content:encoded>

    <pubDate>Thu, 10 Jul 2008 12:00:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/52-guid.html</guid>
    <category>favicon</category>
<category>imagemagick</category>
<category>php</category>

</item>
<item>
    <title>Nieuwe website gemaakt voor StevigZitten.nl</title>
    <link>http://www.gerritveldman.nl/weblog/archives/53-Nieuwe-website-gemaakt-voor-StevigZitten.nl.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/53-Nieuwe-website-gemaakt-voor-StevigZitten.nl.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=53</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=53</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    &lt;a href=&#039;http://www.stevigzitten.nl&#039;&gt;&lt;img width=&#039;110&#039; height=&#039;83&#039; style=&quot;float: right; border: 0px; padding-left: 5px; padding-right: 5px;&quot; src=&quot;http://www.gerritveldman.nl/weblog/uploads/stevigzitten.serendipityThumb.jpg&quot; alt=&quot;&quot; target=&quot;_blank&quot; /&gt;&lt;/a&gt;De afgelopen tijd heb ik een nieuwe website gemaakt voor &lt;a href=&quot;http://www.stevigzitten.nl&quot; target=&quot;_blank&quot;&gt;StevigZitten.nl&lt;/a&gt;, een bedrijf dat tuinmeubels en andere meubels maakt van gebruikt steigerhout. Behalve het ontwerp heb ik ook de zoekmachineoptimalisatie voor deze site gedaan.  
    </content:encoded>

    <pubDate>Mon, 07 Jul 2008 12:00:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/53-guid.html</guid>
    <category>ecommerce</category>
<category>seo</category>
<category>webdesign</category>

</item>
<item>
    <title>Een favicon toevoegen aan een website</title>
    <link>http://www.gerritveldman.nl/weblog/archives/51-Een-favicon-toevoegen-aan-een-website.html</link>
            <category>Webdesign</category>
    
    <comments>http://www.gerritveldman.nl/weblog/archives/51-Een-favicon-toevoegen-aan-een-website.html#comments</comments>
    <wfw:comment>http://www.gerritveldman.nl/weblog/wfwcomment.php?cid=51</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.gerritveldman.nl/weblog/rss.php?version=2.0&amp;type=comments&amp;cid=51</wfw:commentRss>
    

    <author>nospam@example.com (Gerrit Veldman)</author>
    <content:encoded>
    Alle moderne internetbrowsers laten tegenwoordig bij veel websites een klein vierkant icoontje zien in de adresbalk en in de lijst met favorieten. Zo&#039;n icoontje heet een &lt;b&gt;favicon&lt;/b&gt;. Als je Firefox of Internet Explorer 7 gebruikt, zie je nu het favicon van deze website in je adresbalk staan. Hoe kom je aan zo&#039;n favicon? Oorspronkelijk moest een favicon altijd het .ico bestandsformaat hebben en met de naam &#039;favicon.ico&#039; worden opgeslagen in de rootmap van een website. Tegenwoordig mag het elke naam hebben, mag het ook in .gif, .jpg of .png formaat zijn en kan het overal op de website geplaatst worden. Wel moet er dan in het head-gedeelte van elke pagina naar verwezen worden.&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&amp;lt;link rel=&quot;shortcut icon&quot; href=&quot;/images/afbeelding.png&quot; /&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Bovendien zit je dan vast aan het formaat van 16x16 pixels. Gewoon een vierkant logo maken en verkleinen naar 16x16. Het voordeel is dat je ook een .gif bestand met animatie kunt gebruiken.&lt;br /&gt;
&lt;br /&gt;
Een favicon in .ico formaat is flexibeler. Zeker wanneer het onder de naam &#039;favicon.ico&#039; in de rootmap is geplaatst, wordt het altijd herkend, ook door websites die favicons van andere websites plaatsen bij links naar die websites. (Een voorbeeld daarvan kun je vinden in de zoekresultaten van &lt;a href=&quot;http://www.stamboomzoeker.nl&quot;  title=&quot;Voorbeeld van favicon bij links (geef eerst een zoekopdracht)&quot; target=&quot;_blank&quot;&gt;Stamboomzoeker.nl&lt;/a&gt;.) Bovendien kan een .ico  bestand ook in grotere formaten worden weergegeven (32x32, 48x48), bijvoorbeeld bij een snelkoppeling naar de website op je bureaublad.&lt;br /&gt;
&lt;br /&gt;
Om een afbeelding in .ico formaat op te slaan heb je echter wel een geavanceerd grafisch programma nodig, zoals Photoshop. GIMP is ook zo&#039;n programma en dat is gratis te &lt;a href=&quot;http://www.gimp.org&quot;  title=&quot;Download GIMP&quot; target=&quot;_blank&quot;&gt;downloaden&lt;/a&gt;. Verder zijn er een aantal websites waar je gratis .gif, .jpg of .png bestanden kunt converteren naar . ico formaat. Een voorbeeld: &lt;a href=&quot;http://tools.dynamicdrive.com/favicon/&quot; title=&quot;Converteer je afbeelding naar een favicon&quot; target=&quot;_blank&quot;&gt;http://tools.dynamicdrive.com/favicon/&lt;/a&gt;. Als het goed is wordt de eventuele transparantie uit een .gif of .png bestand ook transparant in het .ico bestand.&lt;br /&gt;
&lt;br /&gt;
Je kunt het beste uitgaan van een vierkante afbeelding van minimaal 48x48 pixels. Let er wel op dat de afbeelding ook op formaat 16x16 nog goed te onderscheiden moet zijn. Hij mag dus niet te gedetailleerd zijn. Een heel woord of een foto kun je er dus eigenlijk niet op kwijt. 
    </content:encoded>

    <pubDate>Thu, 03 Jul 2008 12:00:00 +0200</pubDate>
    <guid isPermaLink="false">http://www.gerritveldman.nl/weblog/archives/51-guid.html</guid>
    <category>favicon</category>
<category>webdesign</category>

</item>

</channel>
</rss>