Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zamiana kodu HTML!?
Forum PHP.pl > Forum > PHP
kicaj
Bylo na forum juz duzo podobnych tematow, ale nie taki sam tongue.gif
Mam cos takiego:[php:1:2fd063b878]<?php
$wiersz[news] = eregi_replace(": )", "<img src=img/buzka_ok.gif>", $wiersz[news]);
$wiersz[news] = eregi_replace("<", "&", $wiersz[news]);
$wiersz[news] = eregi_replace(">", "&", $wiersz[news]);
?>[/php:1:2fd063b878]
Przy wypełnianiu forumularza user moze wpisac <b>123</b> i na stronie mu wysiwtli efekt taki sam jaki wpisał do forumularza, czyuli beda widoczne znaczniki html, ale chcem dodac to wysiwtlania ze gdy po wpisaniu tzw. buzki to zamieni na <img...> ale wtedy w oknie przegladarki dostaje taki sam efekt jak przy "pogrubienu" tekstu??

Jak to najlepiej rozwiazac?
Zeby znaczniki HTML byly widoczne tak jak user wpisze ale zeby buzki sie zamienialy na obrazki??

Aha i jeszcze jedno jak zrobic jak user wpisze : P to zeby : PPPP tak samo zamienialo na buzke bezwzgledu na ilosc ostatniego znaku, to chyba wyrazenia regularne sa potrzebne
FiDO
Cytat
Aha i jeszcze jedno jak zrobic jak user wpisze : P to zeby : PPPP tak samo zamienialo na buzke bezwzgledu na ilosc ostatniego znaku, to chyba wyrazenia regularne sa potrzebne

Moze

[php:1:abbc61664a]
eregi_replace(": P+", "<img jakis tam>", $wiersz[news]);
[/php:1:abbc61664a]
Nie mam teraz jak sprawdzic, wiec nie recze, ze zadziala.
garry
Cytat
Jak to najlepiej rozwiazac?
Zeby znaczniki HTML byly widoczne tak jak user wpisze ale zeby buzki sie zamienialy na obrazki??


Rozwiazanie jest bardzo proste, poprostu zamien kolejnosc :]


[php:1:1b87e5f793]<?php
$wiersz[news] = eregi_replace("<", "&", $wiersz[news]);
$wiersz[news] = eregi_replace(">", "&", $wiersz[news]);
$wiersz[news] = eregi_replace(": )", "<img src=img/buzka_ok.gif>", $wiersz[news]);
?>[/php:1:1b87e5f793]
wirtus
Dokładnie tak, jak to napisał garr

twój błąd polegał na tym, że najpierw zamieniałeś "buźkę" na <.............>, a potem to co otrzymałeś zamiast "buźki", czyli owe <..........> zamieniałeś na &............&

Rozumiesz błąd?
garry
no dobra to teraz ja, wyskocze z podobnym problemem :)

W mojej wyszukiwarce rozbijam $keywords na tokeny
[php:1:99673e53eb]
// fragment prezentacji wyniku
$body = "Jakas tam tresc";
for ($token = strtok($keywords, " "); $token != ""; $token = strtok(" ")) {
$body = preg_replace("/$token/i", "<b class='found'>$0</b>", $body);
}
[/php:1:99673e53eb]

Działa milutko, z małym wyjątkiem :)
Jeśli $keywords dla przykładu zrobie : "jak las" w pierwszym przebiegu wynik będzie "<b class='found'>Jak</b>as tam tresc", w drugim przebiegu łyknie fragment htmla tzn. wybolduje paramtr class :)
Kurka, kompletnie nie mam ideii jak to elegancko obejść :/
Moze jakies pomysły?
DeyV
phpBB robi to zdaje się w ten sposów, że najpierw pobiera sam tekst, bez html'a, następnie w pętli wyszukuje wszystkie słowa, jednak zamiast od razu je zamieniać, zapisuje je do tablicy, w postaci tab[$słowo] = $słowo_po_zmianie, a następnie, przy pomocy np. strtr ($nasz_text, $tab) wykonuje zmiany.
A przynajmniej tak mi sie zdaje aaevil.gif
garry
Nie zabardzo mi to biegało wiec wykombinowałem to tak:
[php:1:37b2947857]
$keywords = str_replace(">", "", $keywords);
$keywords = str_replace("<", "", $keywords);
//itp.... ze względu na prega trzebaby wyciąć znaki specjalne

$patterns = array();
$replacements = array();
for ($token = strtok($keywords, " "); $token != ""; $token = strtok(" ")) {

if ($token != "b" && $token != "B") {
$patterns[] = "/$token/si";
$replacements[] = "<b>$0</b>";
}
}
// ....
$body_dst = preg_replace($patterns,$replacements,$body_src);
$body_dst = str_replace("<b>","<b class='found'>",$body_dst);
[/php:1:37b2947857]

Niezbyt eleganckie, ale działa :)
kicaj
Jesli chodzi o moj problem to juz sobie poradzilem smile.gif

thx garry
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.