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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| <?php
//$session_start();
# -----------------------------------------------------------------------
# Fonction main
function main($src) {
$lstBalise = array('g', 'i', 's', 'q', 'c');
// Met en minuscule les bbcodes et gestion des fermetures.
for ($i = 0; $i < count($lstBalise); $i ++) {
$src = str_replace("[" + strtoupper($lstBalise[$i]) + "]", "[" + $lstBalise[$i] + "]", $src);
$src = str_replace("[/" + strtoupper($lstBalise[$i]) + "]", "[/" + $lstBalise[$i] + "]", $src);
$src = verif_fermeture($lstBalise[$i], $src);
}
echo $src;
}
# -----------------------------------------------------------------------
# Ajoute une/des fermeture(s) de bbcode si il en manque(s)
function verif_fermeture($bal, $src) {
$debBal = count(explode("[".$bal."]", $src)) - 1;
$finBal = count(explode("[/".$bal."]", $src)) - 1;
// Met le meme nombre de d'ouverture que de fermeture (où inversement).
if ($debBal > $finBal) {
for ($i = 0; $i < ($debBal - $finBal); $i ++) { $src = $src."[/".$bal."]"; }
}
elseif ($debBal < $finBal) {
for ($i = 0; $i < ($finbBal - $debBal); $i ++) { $src = $src."[".$bal."]"; }
}
// Nouveau nombre exacte
$debBal = count(explode("[".$bal."]", $src)) - 1;
// Tableau des positions d'ouverture et de fermeture.
$nb_debPos = posiBalise($src, "[".$bal."]", $debBal);
$nb_finPos = posiBalise($src, "[/".$bal."]", $debBal);
// Verification si les ouvertures sont avants les fermetures.
$nbSupp = 0;
for ($i = 0; $i < count($nb_debPos); $i ++) {
if ($nb_finPos[$i] < $nb_debPos[$i]) { $nbSupp = $nbSupp + 1; }
}
// On supprime le nombre d'occurence dont les balises sont inversées.
if ($nbSupp > 0) {
$src = str_replace("[".$bal."]", "", $src, $nbSupp);
$src = str_replace("[/".$bal."]", "", $src, $nbSupp);
}
return $src;
}
# -----------------------------------------------------------------------
# Retourne un tableau de position d'une balise dans une source
function posiBalise($src, $bal, $nb) {
$lst = array();
for ($i = 0; $i < $nb; $i ++) {
if ($i == 0) { array_push($lst, strpos($src, $bal)); }
else { array_push($lst, strpos($src, $bal, $lst[$i - 1] + strlen($bal))); }
}
return $lst;
}
if (!empty($_POST['editext'])) { main(htmlentities($_POST['editext'], ENT_QUOTES)); }
?> |
Partager