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
- 4464 megtekintés
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. :)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Hm. Kösz, akkor nem velem van a baj.
Én még most sem értem, hogy te mit értettél meg. ;)
Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)
- A hozzászóláshoz be kell jelentkezni
A $_POST egy eleme így néz ki:
'Foo' => '<input name="Foo" maxlength="" size="" type="text">'
Ha jól értettem.
-----------
"640GB sokmindenre elég"
Ha munkát keresel, akkor kezdd az elején: írj CV-t.
- A hozzászóláshoz be kell jelentkezni
A POST elemei így néznek ki:
'Foo' => 'szöveg amire cserélve lesz az input kódja'
Majd '<input name="Foo" maxlength="" size="" type="text">' lesz kicserélve a POST-ban kapott értékkel.
- A hozzászóláshoz be kell jelentkezni
CKEditor nem tud amúgy ilyet by design?
-----------
"640GB sokmindenre elég"
Ha munkát keresel, akkor kezdd az elején: írj CV-t.
- A hozzászóláshoz be kell jelentkezni
Ha nem akarsz regexp-et írni, ajánlom ezt: https://code.google.com/p/phpquery/
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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. :)
- A hozzászóláshoz be kell jelentkezni
Regexp patternben a .{0,5} azt jelenti, hogy bármilyen karakterből, legalább 0, legfeljebb 5 darab. A leírásod alapján Te nem igazán ezt akarod.
-----------
"640GB sokmindenre elég"
Ha munkát keresel, akkor kezdd az elején: írj CV-t.
- A hozzászóláshoz be kell jelentkezni
Igen, de mivel ckeditor generálja a kódot, az csak számot fog belerakni. Valamint nekem mindegy, hogy mi ennek a tulajdonságnak az értéke, mivel a pdf-ben már nem fog input mező megjelenni.
- A hozzászóláshoz be kell jelentkezni
Most én is kamingoutolok: a megoldásodból jöttem rá pontosan, hogy mi a feladat.
A kérdés alapján teljesen másfelé sodródtam volna.
- A hozzászóláshoz be kell jelentkezni
Nem vagy vele egyedül, most jöttem rá, hogy az input-ot nem feltétlenül inputra akarja cserélni.
-----------
"640GB sokmindenre elég"
Ha munkát keresel, akkor kezdd az elején: írj CV-t.
- A hozzászóláshoz be kell jelentkezni
Bocsánat, most visszaolvasva tényleg nem írtam le rendesen, hogy mire is akartam lecserélni az inputot.
- A hozzászóláshoz be kell jelentkezni
Nem gáz, nem mindig tudod, hogy másnak milyen infókra van szüksége a megértéshez :)
-----------
"640GB sokmindenre elég"
Ha munkát keresel, akkor kezdd az elején: írj CV-t.
- A hozzászóláshoz be kell jelentkezni