{"id":95,"date":"2012-06-05T22:40:25","date_gmt":"2012-06-05T20:40:25","guid":{"rendered":"http:\/\/blog.asafety.fr\/?p=95"},"modified":"2015-11-10T22:47:24","modified_gmt":"2015-11-10T20:47:24","slug":"php-suppression-espaces-blancs-des-fichiers-dun-site-web","status":"publish","type":"post","link":"https:\/\/www.asafety.fr\/en\/projects-and-tools\/php-suppression-espaces-blancs-des-fichiers-dun-site-web\/","title":{"rendered":"[PHP] Suppression espaces blancs des fichiers d&#8217;un site web"},"content":{"rendered":"<p><\/p>\n<p><p>Un probl\u00e8me r\u00e9curent qui peut affecter divers fichiers d&#8217;un site web (page xHTML, CSS, script PHP&#8230;) concerne la pr\u00e9sence de caract\u00e8res blancs en amont et aval de tels fichiers. Diverses raisons peuvent mener au besoin de supprimer ces caract\u00e8res, d&#8217;o\u00f9 la r\u00e9alisation du script qui suit qui s&#8217;occupe automatiquement d&#8217;identifier r\u00e9cursivement les fichiers concern\u00e9s et de les traiter.<\/p>\n<p>Ces espaces blancs peuvent \u00eatre :<\/p>\n<ul>\n<li>\\n<\/li>\n<li>\\r<\/li>\n<li>\\t<\/li>\n<li>&#8221; &#8220;<\/li>\n<li>\\x0B<\/li>\n<li>\\0<\/li>\n<\/ul>\n<p>Attention toutefois au \\0 qui est marqueur de fin de fichier pour certains.<\/p>\n<p>Mais pourquoi et comment j&#8217;en suis venu \u00e0 pondre ce petit script ?<\/p>\n<p>La premi\u00e8re raison concerne la compression des fichiers. Sur un serveur web, il y a tr\u00e8s souvent des fichiers qui ont un nombre incalculable d&#8217;espace ou de retour \u00e0 la ligne en amont ou en aval. Pourquoi les conserver? Sachant qu&#8217;\u00e0 chaque appel de la page il sont transmis au navigateur de l&#8217;utilisateur \u00e0 raison d&#8217;un octet par caract\u00e8re. \u00c7a fait du d\u00e9bit inutile et suppl\u00e9mentaire!<\/p>\n<p>La seconde raison est lors de la conversion d&#8217;encodage de fichier. C&#8217;est pr\u00e9cis\u00e9ment le probl\u00e8me que j&#8217;ai rencontr\u00e9. J&#8217;ai converti toute une base de donn\u00e9es, tous les fichiers et toute la configuration d&#8217;un serveur de l&#8217;ISO-8859-1 vers UTF-8. Que vous utilisiez &#8220;iconv&#8221; ou une autre solution de conversion, il se peut qu&#8217;un d\u00e9savantage survienne \u00e0 cette conversion : certains caract\u00e8res blancs en ISO sont doubl\u00e9s ou convertis en d&#8217;autres whitespace lors de cette conversion. Ce qui a engendr\u00e9 dans mon cas sur plusieurs milliers de fichiers l&#8217;ajout de plusieurs retour \u00e0 la ligne en amont ou en aval&#8230;<\/p>\n<p>La troisi\u00e8me raison, qui d\u00e9coule de la seconde, est que lorsqu&#8217;un fichier PHP a des whitespaces en amont ou en aval, ces caract\u00e8res sont directement transmis lors de leur interpr\u00e9tation au navigateur de l&#8217;utilisateur. Ainsi, dans le cas d&#8217;utilisation de session, donc avec un &#8220;session_start()&#8221; \u00e0 un certain endroit, il ne faut ABSOLUMENT PAS que des donn\u00e9es aient \u00e9t\u00e9 transf\u00e9r\u00e9es au pr\u00e9alable, sinon une erreur survient. Donc, tous les fichiers interpr\u00e9t\u00e9s ou inclus ne doivent pas effectuer d&#8217;echo ou afficher des caract\u00e8res html ou whitespace avant ce &#8220;session_start()&#8221;. D&#8217;o\u00f9 ce robot de nettoyage.<\/p>\n<p>Le probl\u00e8me des &#8220;sessions_start()&#8221; n&#8217;en est qu&#8217;un parmi plusieurs. Toutes g\u00e9n\u00e9rations en PHP de document\/fichier dynamique d&#8217;un autre type n\u00e9cessite qu&#8217;aucune donn\u00e9e ne soit transmise avant. C&#8217;est le cas de la g\u00e9n\u00e9ration d&#8217;image dynamique via GD2 ou m\u00eame de la g\u00e9n\u00e9ration de PDF dynamique avec FPDF. Ces g\u00e9n\u00e9rations sont faites en PHP et avant de les transmettre au client un en-t\u00eate avec un content-type MIME correcte doit \u00eatre d\u00e9fini, ce qui implique qu&#8217;aucune donn\u00e9es ne doit \u00eatre transmises au pr\u00e9alable.<\/p>\n<p>Bien s\u00fbr, il y a la solution de capturer le tampon avec des &#8220;ob_start()&#8221;, &#8220;ob_end()&#8221;, &#8220;ob_end_flush()&#8221;, &#8220;ob_get_contents()&#8221; et appliquer des &#8220;trim()&#8221; avant d&#8217;envoyer le tampon, mais c&#8217;est de la &#8220;triche&#8221; et des traitements suppl\u00e9mentaires c\u00f4t\u00e9 serveur&#8230;<\/p>\n<p>J&#8217;ai donc d\u00e9velopp\u00e9 le script suivant qui analyse r\u00e9cursivement un path absolu, v\u00e9rifie tous les fichiers, affiche en rouge ceux ayant des whistespace en amont ou aval, et supprime les whitespaces des fichiers s\u00e9lectionn\u00e9s apr\u00e8s confirmation sans toucher au reste du contenu du fichier.<\/p>\n<p>[php]&amp;amp;amp;lt;!DOCTYPE html PUBLIC &amp;amp;amp;quot;-\/\/W3C\/\/DTD XHTML 1.0 Strict\/\/EN&amp;amp;amp;quot; &amp;amp;amp;quot;http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd&amp;amp;amp;quot;&amp;amp;amp;gt;&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;&amp;amp;amp;lt;html xmlns=&amp;amp;amp;quot;http:\/\/www.w3.org\/1999\/xhtml&amp;amp;amp;quot;&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;head&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;style&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n *{&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n font-family:verdana;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n font-size:10px;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n }&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt; .error{&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n font-weight:bold;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n color:#AA0000;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n }&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt; .success{&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n font-weight:bold;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n color:#00AA00;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n }&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;\/style&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;\/head&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;body&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;form action=&amp;amp;amp;quot;&amp;amp;amp;quot; method=&amp;amp;amp;quot;post&amp;amp;amp;quot;&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;table&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;tr&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;td&amp;amp;amp;gt;Absolute path to analyze :&amp;amp;amp;lt;\/td&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;td&amp;amp;amp;gt;&amp;amp;amp;lt;input type=&amp;amp;amp;quot;text&amp;amp;amp;quot; name=&amp;amp;amp;quot;path&amp;amp;amp;quot; size=&amp;amp;amp;quot;100&amp;amp;amp;quot; value=&amp;amp;amp;quot;&amp;amp;amp;lt;?php echo $_SERVER[&amp;amp;amp;quot;DOCUMENT_ROOT&amp;amp;amp;quot;];?&amp;amp;amp;gt;&amp;amp;amp;quot; \/&amp;amp;amp;gt;&amp;amp;amp;lt;\/td&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;\/tr&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;\/table&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;input type=&amp;amp;amp;quot;submit&amp;amp;amp;quot; value=&amp;amp;amp;quot;Run&amp;amp;amp;quot; \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;\/form&amp;amp;amp;gt;&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;&amp;amp;amp;lt;?php&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;function printFile($file, $blankExists){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n echo &amp;amp;amp;quot;&amp;amp;amp;lt;li class=&#8217;&amp;amp;amp;quot; . (($blankExists) ? &amp;amp;amp;quot;error&amp;amp;amp;quot; : &amp;amp;amp;quot;success&amp;amp;amp;quot;) . &amp;amp;amp;quot;&#8217;&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;input type=&#8217;checkbox&#8217; value=&#8217;$file&#8217; name=&#8217;files[]&#8217; &amp;amp;amp;quot; . (($blankExists) ? &amp;amp;amp;quot;checked&amp;amp;amp;quot; : &amp;amp;amp;quot;&amp;amp;amp;quot;) . &amp;amp;amp;quot;\/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $file&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;\/li&amp;amp;amp;gt;&amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n}&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;function analyzeFile($file){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $contents = @file_get_contents($file);&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n return (preg_match(&amp;amp;amp;quot;\/^(\\n|\\t|\\r| |\\x0B|\\&amp;amp;amp;#92;&amp;amp;amp;#48;)\/i&amp;amp;amp;quot;, $contents) || preg_match(&amp;amp;amp;quot;\/(\\n|\\t|\\r| |\\x0B|\\&amp;amp;amp;#92;&amp;amp;amp;#48;)$\/i&amp;amp;amp;quot;, $contents));&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n}&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;function cleanFile($file){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $flag = false;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $contents = @file_get_contents($file);&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $fp = @fopen($file, &amp;amp;amp;quot;w&amp;amp;amp;quot;);&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n if($fp){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n @fputs($fp, trim($contents));&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n @fclose($fp);&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $flag = true;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n }&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n return $flag;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n}&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;function fileWalker($luke){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $dp = @opendir($luke) or die(&amp;amp;amp;quot;Directory $luke doesn&#8217;t exist&#8230;&amp;amp;amp;quot;);&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $indexExists = false;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $folders = array();&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt; while($file = @readdir($dp)){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n if(in_array($file, array(&amp;amp;amp;quot;.&amp;amp;amp;quot;, &amp;amp;amp;quot;..&amp;amp;amp;quot;, &amp;amp;amp;quot;.svn&amp;amp;amp;quot;))) continue;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n if(is_dir($luke.&#8217;\/&#8217;.$file))&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $folders[] = $luke.&#8217;\/&#8217;.$file;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n else {&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n printFile($luke.&#8217;\/&#8217;.$file, analyzeFile($luke.&#8217;\/&#8217;.$file));&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n }&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n }&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n @closedir($dp);&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt; foreach($folders as $folder){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n echo &amp;amp;amp;quot;&amp;amp;amp;lt;ul&amp;amp;amp;gt;&amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n fileWalker($folder);&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n echo &amp;amp;amp;quot;&amp;amp;amp;lt;\/ul&amp;amp;amp;gt;&amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n }&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;}&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;if(isset($_POST[&amp;amp;amp;quot;path&amp;amp;amp;quot;])){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n echo &amp;amp;amp;quot;&amp;amp;amp;lt;form action=&#8221; method=&#8217;post&#8217;&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;input type=&#8217;submit&#8217; value=&#8217;Trim files&#8217; \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;ul&amp;amp;amp;gt;&amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n fileWalker(trim(strval($_POST[&amp;amp;amp;quot;path&amp;amp;amp;quot;])));&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n echo &amp;amp;amp;quot; &amp;amp;amp;lt;\/ul&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;input type=&#8217;submit&#8217; value=&#8217;Trim files&#8217; \/&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n &amp;amp;amp;lt;\/form&amp;amp;amp;gt;&amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n} elseif(isset($_POST[&amp;amp;amp;quot;files&amp;amp;amp;quot;]) &amp;amp;amp;amp;&amp;amp;amp;amp; is_array($_POST[&amp;amp;amp;quot;files&amp;amp;amp;quot;]) &amp;amp;amp;amp;&amp;amp;amp;amp; count($_POST[&amp;amp;amp;quot;files&amp;amp;amp;quot;]) &amp;amp;amp;gt; 0){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n foreach($_POST[&amp;amp;amp;quot;files&amp;amp;amp;quot;] as $file){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n $file = trim(strval($file));&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n if(file_exists($file) &amp;amp;amp;amp;&amp;amp;amp;amp; !is_dir($file) &amp;amp;amp;amp;&amp;amp;amp;amp; is_writable($file)){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n if(cleanFile($file)){&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n echo &amp;amp;amp;quot;&amp;amp;amp;lt;div class=&#8217;success&#8217;&amp;amp;amp;gt;$file&amp;amp;amp;lt;\/div&amp;amp;amp;gt;&amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n } else&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n echo &amp;amp;amp;quot;&amp;amp;amp;lt;div class=&#8217;error&#8217;&amp;amp;amp;gt;$file&amp;amp;amp;lt;\/div&amp;amp;amp;gt;&amp;amp;amp;quot;;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n }&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n }&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n}&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;?&amp;amp;amp;gt;&amp;amp;lt;\/p&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;lt;p&amp;amp;gt;&amp;amp;amp;lt;\/body&amp;amp;amp;gt;&amp;amp;lt;br \/&amp;amp;gt;&amp;lt;br \/&amp;gt;<br \/>\n&amp;amp;amp;lt;\/html&amp;amp;amp;gt;[\/php]<\/p>\n<p>En esp\u00e9rant que \u00e7a puisse d\u00e9panner certains! \ud83d\ude09<\/p>\n<\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Un probl\u00e8me r\u00e9curent qui peut affecter divers fichiers d&#8217;un site web (page xHTML, CSS, script PHP&#8230;) concerne la pr\u00e9sence de [&hellip;]<\/p>\n","protected":false},"author":1337,"featured_media":1195,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,15],"tags":[20,17,22,23,19,21,18],"class_list":["post-95","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-prog-and-dev","category-projects-and-tools","tag-iso-8859-1","tag-php","tag-recursivite","tag-sessions-php","tag-trim","tag-utf-8","tag-whitespace"],"_links":{"self":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/95","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/users\/1337"}],"replies":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/comments?post=95"}],"version-history":[{"count":11,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/95\/revisions"}],"predecessor-version":[{"id":1633,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/posts\/95\/revisions\/1633"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/media\/1195"}],"wp:attachment":[{"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/media?parent=95"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/categories?post=95"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.asafety.fr\/en\/wp-json\/wp\/v2\/tags?post=95"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}