Ba oui c´est normal
Déjà pourquoi fais tu deux str_replace() ? tu en fait un pour [youtube] et l´autre pour [/youtube].
J´imagine que tu veux remplacer [youtube]lien de la video[/youtube] par la video.
Ensuite de très grosses erreurs, tu as mis le texte à remplacer entre ´ ´ qui signifient une chaine de caracteres exclusivements alors que tu utilise une variable dedans. Il faut utiliser la concaténation. Il faut aussi mettre des \ à tes ´ sinon ça va tout faire buguer.
Tiens je te réécris le bon code :
$remplacement = ´<div style="margin:20px; margin-top:5px">
<div class="smallfont" style="margin-bottom:2px">Code:</div>
<pre class="alt2" dir="ltr" style="
margin: 0px;
padding: 6px;
border: 1px inset;
width: 640px;
height: 34px;
text-align: left;
overflow:
auto"><b>
http://www.youtube.com/watch?v=%22%B4,´. $1 .´[%B4
</b></pre>
</div>´;
$data[´texte´] = str_replace(´[youtube](.+)[/youtube]´, $remplacement);
Mais là tu n´auras pas la video, tu auras juste marqué le lien