Bonjour,

J'essaie de faire un script sur une chaine de caractères.

Pour l'instant j'ai fais cela :

Page de test : https://www.zw3b.net/links-contents.php

Dans la fonction "parse", mon expression régulière n'est pas bonne.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
 
function parse($text)
{
	$regex_pre = "#<((pre|PRE))>(.*?)<\/\\1>#s";
	$regex_code = "#<((code|code))>(.*?)<\/\\1>#s";
 
	$text = preg_replace_callback($regex_pre, 'parse_preFormated', $text, -1 , $count);
	$text = preg_replace_callback($regex_code, 'parse_codeFormated', $text, -1 , $count);
 
	return $text;
}
 
function parse_preFormated($value) {
 
	//echo '<pre>'.print_r($value,1).'</pre>';
 
	$script_temp = $value[3];
	$script_temp = utf8_encode($script_temp);
 
	$script = htmlentities($script_temp, ENT_QUOTES | ENT_SUBSTITUTE | ENT_XHTML, null, false);
 
	//$script = str_replace(array('/', '\\'), array('/', '\'), $script);
	$script = str_replace(array('/', '\\', '\'', '@'), array('\&sol;', '\\', '\&apos;', '\@'), $script);
 
	$script = '<pre class="code">'.$script.'</pre>';
 
	return $script;
}
 
function parse_codeFormated($value) {
 
	//echo '<pre>'.print_r($value,1).'</pre>';
 
	$script_temp = $value[3];
	$script_temp = utf8_encode($script_temp);
 
	$script = htmlentities($script_temp, ENT_QUOTES | ENT_SUBSTITUTE | ENT_XHTML, null, false);
 
	$script = str_replace(array('/', '\\', '\'', '@'), array('\&sol;', '\\', '\&apos;', '\@'), $script);
 
	$script = '<code class="code">'.$script.'</code>';
 
	return $script;
}
 
#................
Si dans le champ $text j'ajoute un "<pre>mon_code</pre>" l'expression régulière de "parse" s'arrête à la premiere balise de fermeture </pre>


Mon champ texte est celui-ci avec le code complet :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#................
 
$text = '<p>mon texte de début</p>'."\n\n";
 
$text.= '<pre>'."\n\n";
$text.= '<?php'."\n\n";
$text.= '# Pour afficher un tableau PHP'."\n\n";
 
$text.= '$var[\'website\'] = 'domain.tld';'."\n";
$text.= '$var[\'weblink\'] = 'http://www.domain.tld';'."\n\n";
 
$text.= '# BUG ICI'."\n";
$text = 'echo <pre>\'.print_r($var,1).\'</pre>'."\n\n";
 
$text = 'echo 'My domain : '.$var[\'website\']."\n\n";

$text = '?>'."\n";
$text.= '</pre>'."\n\n";
 
$text.= '<p>mon texte de fin.</p>'."\n\n";
 
#................
J'appelle comme cela :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
#................
 
echo parse($text);
 
?>
Quelqu'un sait ? Qui a une solution ?

Merci à vous.

Romain

J'ai fais une API si vous voulez plus en voir ZW3B API Client v7.1.2 http://api.zw3b.fr/ - http://howto.zw3b.fr/developpement/php/zw3b-api-client
PCRE : https://www.php.net/manual/fr/refere...ern.syntax.php

Initiation aux expressions régulières en PHP de Guillaume Rossolini : https://g-rossolini.developpez.com/tutoriels/php/regex/
Rien à voir mais peut sûrement vous interessez :
  1. J'ai écris un code PHP de "Visualisation HTML de vos rapports DMARC (rapport de conformité des serveurs mail destinataires de vos couriels)" -> PHPSource à installer sur votre serveur (enlevez le "s" de "php" pour avoir le rendu) - plus d'info ici
  2. Et des mini-scripts ".bash" (commentaire 32) pour dezipper facilement les fichiers "dmarc.zip" selon l'envie cf : contributor PengouinPdt.