Autor | Zpráva | ||
---|---|---|---|
medden Profil * |
#1 · Zasláno: 6. 4. 2007, 17:49:01
Zdravím,
píšem si vlastný template systém a v ňom používam značky uzavreté do [] Problém je ale v tom, že v template sa môže vyskytnúť aj php kód, v ktorom tiež môže byť [] (napríklad prístup k poliam). Template značky získavam cez jednoduché preg_match_all s regulárom ~[(.*)]~Us ale ako ho upraviť, aby ignoroval všetko čo je php? (teda medzi <?php a ?>). Skúšal som lookbehind asercie (niečo ako (?<!<?php.*) a podobne, ale tam musím mať nastavenú konštantnú dĺžku (Compilation failed: lookbehind assertion is not fixed length ) |
||
pavel prochazka.zde.cz Profil * |
#2 · Zasláno: 6. 4. 2007, 18:23:15
function Odstranit_HTML_Znacky($sString)
{ // tato funkce odstrani HTML a PHP znacky, vcetne kodu. zustane jen prosty text... global $mazat; $nPrizna1 = false; $sString = Trim($sString); $nPozice = StrPos($sString, "<?php"); if ($nPozice === false){ $nPozice = StrPos($sString, "<?"); } if ($nPozice !== false ) { $mazat = true; $nPoziceX = StrPos($sString, "?>"); if ($nPoziceX !== false ) { $sString = substr_replace($sString, '', $nPozice, ($nPoziceX - $nPozice) + 2); $mazat = false; } else{ $sString = SubStr($sString, 0, $nPozice); } if ($sString !== false)$nPrizna1 = true ; } $nPozice = StrPos($sString, "?>"); if ($nPozice !== false) { $mazat = false; $sString = SubStr($sString, $nPozice + 2); $nPrizna1 = false; } if ($mazat == false or $nPrizna1 == true) { $sNewString = Strip_Tags($sString); $sNewString = Str_Replace(" ", "", $sNewString); } else $sNewString = ""; return $sNewString; } Tato funkce vyzaduje posilani filtrovane stranky po radkach!!!! |
||
pavel prochazka.zde.cz Profil * |
#3 · Zasláno: 6. 4. 2007, 18:24:46
Jak funkce pracuje si muzes vyzkouset na vyhledavacim scriptu meho webu :). Kde je v sekci i php kod vyhledavaciho scriptu...
|
||
one_k Profil |
#4 · Zasláno: 6. 4. 2007, 18:31:58
pavel prochazka.zde.cz
aaa no fuj.. je dobre pouzit pro zapis templatovacich znacek znaky, ktere budou snadno odlisitelne od kodu. napr. pocitat i s case-sensitivitou priklad z HTML_TMPL: <TMPL_VAR NAME="promenna"> proste jednoznacne identifikovatelne. Jde preci i o rychlost toho systemu,nebo ne? Uz jen to ze ho pises v php ho dost zpomaluje oproti perlovym templatovacim systemum. Takze zadne slozitosti:) |
||
pavel prochazka.zde.cz Profil * |
one_k
hmm, pekne ale kdyz jsem se ptal jak s dala vyhledavaci script pro web, tak me nikdo nepomohl :(, jen odkazaly na sluzku bud placenou a nebo free (google) ktera je uplne k nicemu.... Tak jsem si napsal svoje reseni a faka spolehlive... |
||
pavel prochazka.zde.cz Profil * |
#6 · Zasláno: 6. 4. 2007, 18:52:04
one_k
Stou konstantou uzavrenou ve znaku <> je to fakt super napad....:). To me nenapadlo a kod bude pro vycisteni fakt uplne primitivni :). Mozna to nekdy predelam az bude cas.... |
||
medden Profil * |
#7 · Zasláno: 6. 4. 2007, 19:50:38
pavel prochazka.zde.cz
Ďakujem za funkciu a snahu, ale to nie je to čo som chcel... :-) Skús si ešte raz prečítať môj dotaz, ty si písal o niečom úplne inom. one_k detto Skúsim radšej príklad:
Teraz je výsledok
Ja sa toho ["abc"] chcem zbaviť. Dúfam, že je to teraz zrozumiteľné, hádam tu ešte niekto vie po slovensky :) |
||
tiso Profil |
#8 · Zasláno: 6. 4. 2007, 19:57:12
medden - stačí keď v regulárnom výraze vylúčiš použitie úvodzoviek vo vnútri [], ale spoľahlivé to nebude (môžeš zabudnúť napísať úvodzovky v PHP, alebo použiješ konštantu ktorá sa v úvodzovkách nepíše)
Chalani Ti tu naznačovali aby si nevymýšľal koleso ale použil už vymyslené... |
||
pavel prochazka.zde.cz Profil * |
#9 · Zasláno: 6. 4. 2007, 20:05:02
medden
aha aha, ja jsem to z toho popisu fakt pochopil tak jak jsem prezentoval. Ale to nevadi. Staci moji funkci jen upravit, misto aby mazala dany retezec, muze prohledavat v tomto useku uvozovky a zacit mazat az zatema uvozovkama dokun nenarazi na dalsi uvozovky pro ukonceni, A to jen v rezii PHP kodu :). |
||
medden Profil * |
#10 · Zasláno: 6. 4. 2007, 20:15:15
Radšej vám to napíšem ešte raz:
Chcem získať všetko čo je medzi [ a ] a nie je to v php kóde. stačí keď v regulárnom výraze vylúčiš použitie úvodzoviek vo vnútri [], ale spoľahlivé to nebude (môžeš zabudnúť napísať úvodzovky v PHP, alebo použiješ konštantu ktorá sa v úvodzovkách nepíše) Presne o to ide, keby si chcel, tak ti napíšem aj 10 príkladov kedy to nepôjde. To znamená, že vylúčenie podľa úvodzoviek a podobne nepripadá do úvahy, keď to ide univerzálnejšie (tj vylúčiť všetko čo je vnútri php kódu). |
||
Ssob Profil |
#11 · Zasláno: 6. 4. 2007, 21:00:17
nemuzes si ty znacky pojmenovat jinak? Napr. zacinala by [- a koncila -].
|
||
medden Profil * |
#12 · Zasláno: 6. 4. 2007, 21:23:15
Ssob
Nemôžem, lebo je to škaredé obchádzanie problému, a potom to už nie je univerzálne. Na jedno riešenie som prišiel, je celkom zaujímavé, ale zaujímalo by ma či ešte na niečo prídete. |
||
YoSarin Profil |
#13 · Zasláno: 6. 4. 2007, 21:23:25
medden
Co projíždět ten soubor pěkně znak po znaku a chytat všechny [ a ] - tak aby byly párové. Jakmile v kódu narazíš na posloupnost <?php nebo <? tak vypnout odchytávání těch [] do doby než najedeš na ?>. Není to uplně vychytaný - musíš si dávat pozor na víc věcí než jen <?php ?> (třeba i na stringy). |
||
medden Profil * |
#14 · Zasláno: 7. 4. 2007, 08:02:04
YoSarin
Pekne si vystihol môj myšlienkový postup ;-) To najlepšie, čo som zatiaľ našiel bolo toto:
token_get_all je jedna funkcia, ktorá mi už veľa krát pomohla, odporúčam si ju naštudovať. Vďaka nej odpadajú tie ďalšie problémy, na ktoré si treba dať pozor (" a ' stringy, heredoc syntax, inline a blokové komentáre, ... je toho dosť) |
||
YoSarin Profil |
#15 · Zasláno: 7. 4. 2007, 17:48:22
medden
YoSarin Pekne si vystihol môj myšlienkový postup ;-) Používám to pro zvýrazňování syntaxe ;) |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0