na 5-6 uur (geen geintje
), alle mogelijk preg_replace / match_all patterns te hebben geprobeerd, is het me eindelijk gelukt om mijn doel te bereiken. alleen moet het volgens mij korter kunnen dan dit. 
het probleem is dat er maar 1 of maximaal 2 match(es) vervangen worden. om dit op te lossen heb ik er een loop aan toegevoegd, en het werkt.
maar welke preg_replace guru legt mij even uit hoe ik dit de volgende keer zonder loop kan oplossen? volgens de php documentatie moet de functie ook alle instanties vervangen, tenzij je dit limiteert.
de bedoeling:
als je mail binnen haalt via een socket, dan worden een aantal karakters geencodeerd. nu wil ik dit decoderen.
de code moet elke '=' met een hexadecimaal getal erachter (bijv. '=E1', of '=08') vervangen door '&#' met dan de decimale waarde (bijv. 'é', of ''). dit mag alleen *buiten* html tags gebeuren. klinkt simpel he? niet voor mij
de code:
bovenstaande geeft als resultaat:
(excuses voor het voorbeeld
)
alvast bedankt voor de tips, oplossingen...
het probleem is dat er maar 1 of maximaal 2 match(es) vervangen worden. om dit op te lossen heb ik er een loop aan toegevoegd, en het werkt.
maar welke preg_replace guru legt mij even uit hoe ik dit de volgende keer zonder loop kan oplossen? volgens de php documentatie moet de functie ook alle instanties vervangen, tenzij je dit limiteert.
de bedoeling:
als je mail binnen haalt via een socket, dan worden een aantal karakters geencodeerd. nu wil ik dit decoderen.
de code moet elke '=' met een hexadecimaal getal erachter (bijv. '=E1', of '=08') vervangen door '&#' met dan de decimale waarde (bijv. 'é', of ''). dit mag alleen *buiten* html tags gebeuren. klinkt simpel he? niet voor mij
de code:
PHP:
1
| <?$html = "<HENK =E1>=E1enzo</HENK><FONT face=Verdana size=4>sw=E9=E9=E9=E9t! alabam=E1! :) =E1</FONT>";$match = ">([^<]*?)((=([0-9, A-F]{2}))+?)([^>]*?)<\/";preg_match_all ( "/$match/", $html, $matches);while ( count ( $matches[0] ) > 0 ){ preg_match_all ( "/$match/", $html, $matches); $html = preg_replace ("/$match/e", "\">\\1&amp;amp;#\".hexdec(\"\\4\").\"\\5</\"", $html);}echo $html;?> |
bovenstaande geeft als resultaat:
PHP:
1
| <?<HENK =E1>áenzo</HENK><FONT face=Verdana size=4>swéééét! alabamá! :) á</FONT>?> |
(excuses voor het voorbeeld
alvast bedankt voor de tips, oplossingen...
edit:
rare zin, één van de, hehe, en toen ging bij de edit de layout er aan
rare zin, één van de, hehe, en toen ging bij de edit de layout er aan