ďťż

[PHP] Wyrażenia regularne i tagi HTML coś jest nie tak

       

Podstrony


telcocafe

preg_replace( array( '#<option value="([0-9].*?)">(.*?)</option>#i', '#<option value="([^{}\"].*?)">(.*?)</option>#i', '#<option>([^{}].*?)</option>#i' ), array( '<option value="\\1"<?php if('.$var.'==\\1) echo \' selected="selected"\'?>>\\2</option>', '<option value="\\1"<?php if('.$var.'==\'\\1\') echo \' selected="selected"\'?>>\\2</option>', '<option value="\\1"<?php if('.$var.'==\'\\1\') echo \' selected="selected"\'?>>\\1</option>' ), $kodHTML);
Kod ma za zadanie dodać kod PHP do czystego kodu HTML - tak, aby odpowiednie opcje były zaznaczane automatycznie. Wszystko działało, dopóki nie odkryłem, że jakikolwiek dodatkowy atrybut w <option> powoduje błąd.

Przykład bardziej rozbudowanego pola <select>:<select name="level" style="font-weight: bold"> <option value="1" style="color: red">{lang.L1}</option> <option value="2" style="color: #c4ab00">{lang.L2}</option> <option value="3" style="color: #8aa61e">{lang.L3}</option> <option value="4" style="color: #21a393">{lang.L4}</option> </select>
Niestety, otrzymuję taki kod:<select name="level" style="font-weight: bold"> <option value="1" style="color: red"<?php if($bug['level']==1" style="color: red) echo ' selected="selected"'?>><?=$lang['L1'];?></option> <option value="2" style="color: #c4ab00"<?php if($bug['level']==2" style="color: #c4ab00) echo ' selected="selected"'?>><?=$lang['L2'];?></option> <option value="3" style="color: #8aa61e"<?php if($bug['level']==3" style="color: #8aa61e) echo ' selected="selected"'?>><?=$lang['L3'];?></option> <option value="4" style="color: #21a393"<?php if($bug['level']==4" style="color: #21a393) echo ' selected="selected"'?>><?=$lang['L4'];?></option> </select>
Jak widać, parser nie zatrzymuje się na pierwszym ", lecz idzie aż do ostatniego ". W tej sytuacji nawet nie powinien ruszyć kodu HTML. Zamierzałem dodać dodatkowe (.*?), aby pola <option> mogły zawierać dodatkowe atrybuty. Bezskutecznie.

Z moich analiz wynika, że pierwsza regułka sprawia problem. Po jej usunięciu nie ma błędu, ale nie ma też rezultatów.

Być może lepszym sposobem jest rozbicie całego znacznika <option> na atrybuty i ich wartości za pomocą PCRE. Hardkor, dużo kodu, ale tak już postępuję np. ze znacznikiem <form>.



Ale cię pogięło ;) System szablonów + warunki IF na zaznaczenie i tyle, lub też od biedy bezpośredni kod PHP w szablonie (który i tak raczej nikt nie będzie ruszał.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.