![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Tworzę portal na bazie IPB i muszę dokonać konwersji img na zgodny ze specyfikacją w3c sam kod który dostaję z ipb <img src="style_emoticons/%3C#EMO_DIR#%3E/smile.gif" style="vertical-align: middle;" emoid=":)" alt="smile.gif" border="0"> bez problemu udało mi się zmienić ścieżkę($dane=str_replace('style_emoticons/%3C#EMO_DIR#%3E', $this->forum_adres.'style_emoticons/default', $dane) (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) oraz usunąć emoid="*" ($dane=preg_replace('#emoid=\"[^\"]+"#', "", $dane) (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) i pozostaje problem zamknięcia tagu /> nie mam bladego pojęcia jak to zrobić Z góry dzięki za pomoc Pozdrawiam Zdunek |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
w pojedyńczym cudzysłowiu nie musisz ucieczki robić przed podwójnym cudzysłowiem a jednocześnie przed samym = powinien być znak ucieczki (jak widzisz u mnie działa) więc zamiast - jednocześnie znak zapytania sprawai że wyrażenie regularne nie będzie tak bardzo zachłanne (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) :
Kod $dane=preg_replace('#emoid=\"[^\"]+"#', "", $dane); powinno wystarczyć: Kod $dane=preg_replace('/emoid\="[^"]+?"/', '', $dane); podobnie przy: Kod $dane=preg_replace("#<img([^>]+[^/])>#", "<img \\1/>", $dane ); wystarczy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) : Kod $dane=preg_replace('/<img([^>]+?)>/', '<img\1 />', $dane ); nie chce mi się sprawdzać ;p - ale mimo tych modyfikacji też powinno działać a tam gdzie nie trzeba nie powinno się zbyt mocno definiować wyrażeń regularnych żeby samemu się nie pogubić (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) - jeszcze czasem przydaje się grupowanie ciągu z wyłączeniem zmiennej czyli coś w stylu (?:[^f]) - po prostu ta zmienna nie będzie zapamiętana - czasem jest potrzebna oszczędność gdyż do zmiennych można zapakować bodajrze tylko 9 grup (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) pozatym zamiast urzywać 2 razy preg_replace mógłbyś urzyć tą funkcję tylko raz gdyż jako parametr ona przyjmuje też tablicę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) - więc można ją wykożystać do bbcode ^^ Ten post edytował zegarek84 1.02.2009, 23:13:25 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 2 Dołączył: 29.08.2008 Ostrzeżenie: (0%) ![]() ![]() |
w pojedyńczym cudzysłowiu nie musisz ucieczki robić przed podwójnym cudzysłowiem a jednocześnie przed samym = powinien być znak ucieczki (jak widzisz u mnie działa) więc zamiast - jednocześnie znak zapytania sprawai że wyrażenie regularne nie będzie tak bardzo zachłanne (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) : Kod $dane=preg_replace('#emoid=\"[^\"]+"#', "", $dane); powinno wystarczyć: Kod $dane=preg_replace('/emoid\="[^"]+?"/', '', $dane); podobnie przy: Kod $dane=preg_replace("#<img([^>]+[^/])>#", "<img \\1/>", $dane ); wystarczy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) : Kod $dane=preg_replace('/<img([^>]+?)>/', '<img\1 />', $dane ); nie chce mi się sprawdzać ;p - ale mimo tych modyfikacji też powinno działać a tam gdzie nie trzeba nie powinno się zbyt mocno definiować wyrażeń regularnych żeby samemu się nie pogubić (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) - jeszcze czasem przydaje się grupowanie ciągu z wyłączeniem zmiennej czyli coś w stylu (?:[^f]) - po prostu ta zmienna nie będzie zapamiętana - czasem jest potrzebna oszczędność gdyż do zmiennych można zapakować bodajrze tylko 9 grup (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) pozatym zamiast urzywać 2 razy preg_replace mógłbyś urzyć tą funkcję tylko raz gdyż jako parametr ona przyjmuje też tablicę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) - więc można ją wykożystać do bbcode ^^ przy drugim nie do końca działa, jeśli jest / to dodaje następny a przy pierwszym, jaka jest różnica?, działa tak samo, domyślam się że działa szybciej, ale czemu jest / zamiast # PS: Znasz może jakiś porządny opis składni wyrażeń regularnych w preg ? Witam! Mam kilka uwag. Gdzie jest tytuł wiadomości? Czemu nie używasz BBcode jak wklejasz kod? Czemu używacie ereg(); zamiast preg(); ? Pozdrawiam! Głupie pytanie, po co tytuł tematu jak sam tytuł wszystko tłumaczy ?(tak wiem, regulamin) Odnośnie bbkodu, część na szybko wrzucałem, przepraszam (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Na necie jest dobrze i w prosty sposób opisana składnia ereg, niestety z preg nie jest tak dobrze. Ten post edytował Zdunek 2.02.2009, 20:07:11 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 6.10.2025 - 23:53 |