[Megoldva] PHP - Input tag-ek kicserélése adott szövegre

Sziasztok!

HTML fájl tartalmában szeretném kicserélni az input tagek kódját a megadott value értékre. A kód POST-ban megkapja mindegyik input-nak a nevét és a beállítandó értékét. A tagek minden esetben ilyen formában néznek ki (CKEditor gyártja őket): <input maxlength="" name="" size="" type="text">. Eddig nem kellett a maxlength és size tulajdonságokkal foglalkozni, ezért ilyen kódot alkalmaztam:


foreach ($_POST as $key => $value) {
$html = str_replace('<input name="'.$key.'" type="text" />', $value, $html);
}

De újabban sajnos szükség lett a méretek állítására és így már bonyolódott a dolog. Rátaláltam a preg_replace függvényre, de eddig egyáltalán nem használtam regular expression kifejezéseket.

A maxlength="" és a size="" tulajdonságok értékei egy vagy két karakteresek (~1-50) is lehetnek. Hogyan tudom azt megadni, hogy a ""-ön belül lehet max. 2 karakter? Vagy hogyan tudom megadni, hogy a két " között lehessen bármilyen karakter?

Előre is köszönet a segítségért!
Üdv, Imre

Hozzászólások

Míg előkerül valaki hozzáértő: lehet, hogy csak az én felfogásom nehézkes, de nem igazán értem, miről szól ez az egész.
Miért akarsz PHP programmal egy HTML fájlt átszerkeszteni?
A másik ami nem világos: ellenőrizni akarod, hogy max. két karakter kerülhet az idézőjelek közé vagy kierőszakolni, hogy ha hosszabb lenne, akkor is csak kettőt vegyen figyelembe?
Előbbire ugyanis inkább a preg_match lenne alkalmas. Ha az az egyik kérdés, hogy milyen minta illeszkedik a max. két karakterre idézőjelek között, akkor kb. ilyesmi: ".{0,2}" (ha idézőjelek közé teszed a RE-t, akkor az idézőjeleket escape-elni kell)
Ha nem bármilyen karakter, csak numerikus, akkor pl. "[0-9]{0,2}" - a 0 a minimális, a 2 a maximális előfordulása a korábbi karaktereknek.

De amennyire ki tudom hámozni, hogy mit szeretnél, lehet, hogy valami sablon rendszert kellene keresned - bár valójában maga a PHP is az :) (azt már meg sem merem említeni, hogy esetleg XML+XSLT/vagynemtudommivanújabbanXSLThelyett párossal lenne célszerűbb megoldani)

Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)

Fuh, 1000-szeri elolvasásra sikerült megértenem :)
A maxlength és size értékének megadásához a jelenelegi kódodat kell kibővíteni.

-----------
"640GB sokmindenre elég"

Ha munkát keresel, akkor kezdd az elején: írj CV-t.

Picit rosszul kérdezel, illetve picit rosszul darabolod a feladatodat.

Legelőször el kellene döntened, hogy reguláris kifejezések használatával szeretnéd-e megoldani a feladatodat, vagy azok nélkülözésével (mert ezt most könnyen meg lehet).

Ha RE-t választasz, akkor rá kéne szánni egy kis időt, hogy a konkrét feladatodat félretéve barátkozz azokkal egy kicsit. Ez történhet a PHP-t félretéve, vagy utánanézve, hogy melyik RE-t ismerő függvény mire jó a nyelvben, és azzal. Utóbbi eset azért jobb, mert ezt úgyis meg kell tenned a konkrét feladathoz visszatérve, és azért rosszabb, mert a nyelvi huncutságok elterelhetik figyelmedet a lényegről, illetve téves következtetések levonására vezethetnek

Ha ezek után fittyet hánysz az egész RE-re, akkor hétköznapi sztringdarabolással és 1-2 ciklussal is eljuthatsz a megoldásodhoz.

Elnézést, hogy nem voltam érthető. Valójában úgy megy a dolog, hogy CKEditor-ban megszerkesztenek egy dokumentumot, amit egy másik valaki kitölt majd (input mezőkben a változó adatokat adja meg) és ezt a dokumentumot töltenék le PDF-ben úgy, hogy nem input mezők vannak, hanem csak az a szöveg, amit megadnak az input mezőkben. Gyakorlatilag egy sablont szerkesztenek az editorral és azt a html sablont nyitja meg a kitöltő. Nem hiszem, hogy ez a legjobb megoldás, de én már csak egy kész problémát láttam.

A POST értékében az input nevét (name) kapja meg és azt az értéket, hogy mire kell kicserélni. Mivel a megírt dokumentum egy form-ba van beágyazva. És a pdf generáló ez alapján cseréli ki az adatokat.

Végül a preg_replace függvénnyel sikerült megoldani a cserélést:

foreach ($_POST as $key => $value) {
$html = preg_replace('<<input maxlength=\".{0,5}\" name="'.$key.'" size=\".{0,5}\" type="text" />>', $value, $html);
}

Köszönöm a segítséget. :)