3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2019 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
14 * Déclaration de filtres permettent l'incrustation d'un document selon son type Mime
16 * Ces filtres peuvent être appelés par le modèle `<embXX>` dans certains cas,
17 * en utilisant `|appliquer_filtre{#MIME_TYPE}` sur un contenu
19 * @see appliquer_filtre()
21 * @package SPIP\Core\Filtres\Mime
24 if (!defined('_ECRIRE_INC_VERSION')) {
27 include_spip('inc/filtres');
30 // Les 7 familles de base ne font rien sauf celle des textes
33 * Filtre d'incrustation d'un document image
38 * @param string $t Contenu
39 * @return string Rien.
41 function filtre_image_dist($t) {
46 * Filtre d'incrustation d'un document audio
51 * @param string $t Contenu
52 * @return string Rien.
54 function filtre_audio_dist($t) {
59 * Filtre d'incrustation d'un document video
64 * @param string $t Contenu
65 * @return string Rien.
67 function filtre_video_dist($t) {
72 * Filtre d'incrustation d'un document application
77 * @param string $t Contenu
78 * @return string Rien.
80 function filtre_application_dist($t) {
85 * Filtre d'incrustation d'un document message
90 * @param string $t Contenu
91 * @return string Rien.
93 function filtre_message_dist($t) {
98 * Filtre d'incrustation d'un document multipart
103 * @param string $t Contenu
104 * @return string Rien.
106 function filtre_multipart_dist($t) {
111 * Filtre d'incrustation d'un document test
113 * Échappe les chevrons et l'esperluette.
116 * @param string $t Contenu
117 * @return string Contenu échappé.
119 function filtre_text_dist($t) {
120 static $t1 = array('&', '<', '>');
121 static $t2 = array('&', '<', '>');
123 return '<pre>' . str_replace($t1, $t2, $t) . '</pre>';
127 * Filtre d'incrustation d'un document CSV
129 * Produit un joli tableau à partir du texte CSV
135 * Tableau (formaté en SPIP)
137 function filtre_text_csv_dist($t) {
138 include_spip('inc/csv');
139 list($entete, $lignes, $caption) = analyse_csv($t);
140 foreach ($lignes as &$l) {
143 $corps = join("\n", $lignes) . "\n";
146 join('}}|{{', $entete) .
149 str_replace("\n", "|\n|", $corps);
150 $corps = str_replace('"#', '"', $corps);
151 include_spip('inc/texte');
153 return propre($corps);
157 * Filtre d'incrustation d'un document text/html
159 * Incrustation de HTML, si on est capable de le sécuriser,
160 * sinon, afficher la source
163 * @param string $t Code html
164 * @return string Code html sécurisé ou texte échappé
166 function filtre_text_html_dist($t) {
167 if (!preg_match(',^(.*?)<body[^>]*>(.*)</body>,is', $t, $r)) {
168 return appliquer_filtre($t, 'text/plain');
174 // recuperer les styles internes
175 if (preg_match_all(',<style>(.*?)</style>,is', $h, $r, PREG_PATTERN_ORDER
)) {
176 $style = join("\n", $r[1]);
180 include_spip('inc/distant');
181 if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER
)) {
182 foreach ($r[0] as $l) {
183 preg_match("/href='([^']*)'/", str_replace('"', "'", $l), $m);
184 $style .= "\n/* $l */\n"
185 . str_replace('<', '', recuperer_page($m[1]));
188 // Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
189 $t = safehtml(preg_replace(',<script' . '.*?</script>,is', '', $t));
191 return (!$style ?
'' : "\n<style>" . $style . '</style>') . $t;
195 * Filtre d'incrustation d'un document RealAudio
197 * Retourne les paramètres `<param>` nécessaires à la balise `<object>`
201 * @return string Code HTML des balises `<param>`
203 function filtre_audio_x_pn_realaudio($id) {
205 <param name='controls' value='PositionSlider' />
206 <param name='controls' value='ImageWindow' />
207 <param name='controls' value='PlayButton' />
208 <param name='console' value='Console$id' />
209 <param name='nojava' value='true' />";