8797 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Grâce à Heyoan, j'avais pu mettre en place un système qui, à l'aide d'une fonction et d'un preg_replace_callback remplace des caractères par un équivalent que j'indique.

Or je souhaiterais aujourd'hui remplacer un caractère ou un groupe de caractère par du code html d'insertion flash... Sauf qu'il m'interprète cette même chaîne avant de la renvoyer !

La fonction :

function transliteration($matches)
			{
				$chaine = str_replace ( 'D', 'ḏ', $matches[1] );
				$chaine = str_replace ( 'A1', '<embed src="hiero-swf/a1.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>', $chaine );
				$chaine = str_replace ( '<', '<embed src="hiero-swf/cartouche-i.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>', $chaine );
				$chaine = str_replace ( '>', '<embed src="hiero-swf/cartouche-o.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>', $chaine );
				$chaine = str_replace ( 'A', '<em>3</em>', $chaine );
				$chaine = str_replace ( 'S', '&#353;', $chaine );
				$chaine = str_replace ( 'T', '<u>T</u>', $chaine );
				$chaine = str_replace ( 'H', '&#7717', $chaine );
				$chaine = str_replace ( 'X', '<u>h</u>', $chaine);
				$chaine = str_replace ( 'a', '&#8216', $chaine);
				$chaine = str_replace ( 'i', '&#237;', $chaine);
				$chaine = str_replace ( 's', 's', $chaine);
				return $chaine;
			}


{ici un champ texte tout bête qui récupère le contenu dans une variable }

Appel de la fonction est affichage

if(isset($_POST['saisie'])) {
	    	$saisie = $_POST['saisie'];
				
				$regex = '# (.*)#';					
				$saisie = preg_replace_callback($regex,"transliteration", $saisie);				
				
				echo $saisie;
    	}



Quelqu'un aurait-il une piste ?

Ensuite ma deuxième question (si si...) je voudrais qu'une fois ces caractères remplacer, il y est une vérification sur ":", "!" et "*" pour pouvoir respectivement effectuer une subdivision des cadrats (:), une fin de ligne (!), une juxtaposition (*). Mais là, je ne sais même pas par où commencer !


Smiley biggol
j'avais un truc, mais ca ne marchera pas .. je reflechis un peu et je te renvoi ca...
Modifié par blackkus (03 Sep 2008 - 19:20)
Bon me revoila essaye un truc comme ca :


<?php
$contenu = file_get_contents('test.html');

function transliterationSec($matches,$originArray, $replaceArray, $inc){
	$replace = array(
				'D'=> '&#7695;',
				'S'=>'&#353;',
				'T'=>'<u>T</u>',
				'H'=>'&#7717',
				'X'=>'<u>h</u>',
				'a'=>'&#8216',
				'i'=>'&#237;'
	);
	
	$tmpArray = preg_split($originArray[$inc],$matches);
	$tmpRes = array();
	foreach($tmpArray as $tmpString){
		if($inc==count($originArray))
			$tmpRes[] = strtr($tmpString, $replace)
		else
			$tmpRes[] = transliterationSec($tmpString,$originArray, $replaceArray, $inc++);
	}
	return implode($replaceArray[$inc], $tmpRes);
}

// Fonction de callback
function souligne_D($matches)
{
	$replaceSec = array(
	'A1'=> '<embed src="hiero-swf/a1.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>',
	'<'=> '<embed src="hiero-swf/cartouche-i.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>',
	'>'=> '<embed src="hiero-swf/cartouche-o.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>',
	'A'=> '<em>3</em>');
	
	return '<span class="transliteration">'.$transliterationSec($matches,array_keys($replaceSec), array_values($replaceSec), count($replaceSec).'</span>';
}
$regex = '#<span class="transliteration">(.*?)</span>#';
echo preg_replace_callback(
            $regex[1],
            "souligne_D",
            $contenu);
?>


tu me diras si ca marche, j'ai pas testé...