Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Trudne pytanie, ominiecie tagow
Forum PHP.pl > Forum > PHP
pieto
Witam,

mam takie kodzik

  1. <?php
  2. $content  = explode(' ',$txt);
  3. $content_count = count($content);
  4.  
  5. for($i=0;$i<$content_count ;$i++) {
  6.  
  7. if(strlen($content[$i])>3) {
  8. $pre_content[$i] = sprawdz($content[$i]);
  9. }
  10.  
  11. else {
  12. $pre_content[$i] = $content[$i];
  13. }
  14.  
  15. }
  16. ?>

rozbija mi on tekst na poszczegolne frazy, dalej funkcja sprawdz sprawdzam czy mam w bazie rekord z dana fraza i tak podlikowuje sobie artykuly.
Chcialby do tego ograniczyc aby zostawil w spokoju tagi html'a bo niszczy mi kod sad.gif

Ktos ma jakas koncepcje ?
b_chmura
poczytaj o strip_tags" title="Zobacz w manualu PHP" target="_manual
pieto
Chyba nie zrozumiałeś mojego pytania, lub kodu,

Nie chodzi mi o pozabawienie artykulu otagowania,
tylko aby same tagi nie zostały podlinkowane (nie zostala dla nich wykonana funkcja sprawdz() )

czyli innymi słowy ma to być parser treści a nie całego kodu,

niebardzo widze tez sposobu na pojechanie regularnymi ..
drPayton
  1. <?php
  2. $pre_content[$i] = sprawdz(strip_tags($content[$i]));
  3. ?>

?

Pozdrawiam!
pieto
nie,

zauwaz ze w wyniku
$pre_content[$i] otrzymam string bez otagowania

w $pre_content[$i] powinien znalesc sie przerobiony kod z linkami do innych artykulow ale nie zawierajacych linkow w samych tagach


moze tak:

z bazy wyciągam artykul np :
  1. <div class="tekst"> <font style="font-size:12px">Sformatowany tekst html'em </font><div>


po przepuszeczniu przez funkcje daje mi:
  1. <div class="<a href="link">tekst</a>"> <font style="font-size:12px">Sformatowany <a href="link">tekst</a> html'em </font><div>


a prawidlowo powinien dawac:
  1. <div class="tekst"> <font style="font-size:12px">Sformatowany <a href="link">tekst</a> html'em </font><div>



czyli chodzi o ominiecie tagow tekstu przy sprawdzaniu
Nekro
Stworzy funkcję analizujaca czy "<" jest rozpoczeciem tagu HTML.
Jesli takowa zrobisz to potem wiadomo ze pierwsze wystapienie ">" jest zamknieciem tagu html.

Robie strip_tags na kopii orginalu.
Wyciagam z kopii wszystkie wyrazy z ciagu.
Robie liste wyrazow do podmiany.
Szukam wyrazow w orginalnej tresci.
Jesli znajde to szukam wystapienia tagow HTML a raczej ich pozycji otwarcia i zamkniecia w tekscie (str_pos).
Sprawdzam czy pozycja podanego wyrazu znajduje sie miedzy tymi wartosciami.
Jesli tak to nie podmieniam, jesli nie to podmieniam str_replace().

pisane na szybko weic moga byc jakies uchybienia smile.gif

pozdro
pieto
Mysle ze nie wyjdzie kiedy będzie <tag><w tagu>tresc</w tagu><tag>

zrodzil mi sie pomysl na regularne ale nie jestem w tm dobry,
cos w stylu /<(.*/>(.*)\</\ i do pierwszego $1 podstawiaj czysty string a do drugiego $2 z funkcji,
jednak to tez wyrzuci sie gdy bedzie tag w tagu,

ktos potrfilby podpowiedziec jakby wygladalo takie wyrazenie ?
Snowak
Musisz po prostu napisać prosty parser HTMLa czy tam BBCodu, innego eleganckiego wyjścia nie ma.
in5ane
Z tego co rozumiem (czytając co drugie zdanie) to chcesz zrobić podstrony. Dodawanie/edycje podstron będziesz robił w edytorze wysywig i chcesz chyba zrobić stronnicowanie po danej ilości znaków. A więc nie tędy droga. Myślisz, że takie serwis jak wp.pl czy onet.pl czegoś takiego używają !? Phii... nigdy w życiu. Oni robią to tak, że jak chcą w danym miejscu mieć zrobioną kolejną podstronę to wpisują jakiś tag (np. jak używam [*ns*]). Pokaż Ci mały kodzik z użyciem tego tagu.

Użyję tutaj pager nospora. Będziesz musiał go pobrać z jego strony i umieścić w katalogu ze stroną (mówię tutaj o wersji pod php 4).
A oto kod:
  1. <?php
  2. require_once('Pager.class.php');
  3. //tekst do stronicowania
  4. $tekst = $row['tresc'];
  5. $ar = explode('[*ns*]',$tekst);
  6. $recordsCount = count($ar);
  7. $pager = new Pager('idPagera','article_id.php?id='.$id.'');
  8. $pager->SetTotalRecords($recordsCount);
  9. //na kazdej stronie po jednym kawalku
  10. $pager->SetRecordsPerPage(1);
  11. $pager->render(true);
  12. $pag = $pager->Render();
  13. $start = $pager->GetIndexRecordStart();
  14. ?>



P.S.: Jeżeli nie o to chodziło, trudno. To ja zmarnowałem takto 5 minut.
P.S.2: Jeżeli natomiast pomogłem liczę na przycisk "POMÓGŁ" pod moim postem.
pieto
nie, nie chodzi mi stronnicowanie,

mysle ze jasno wytlumayczylem o co mi biega, wiec jak przecztyasz reszte zdan powinienes zrozumiec winksmiley.jpg
in5ane
Cytat
Chcialby do tego ograniczyc aby zostawil w spokoju tagi html'a bo niszczy mi kod sad.gif

Masz taką fajną funkcję stip_tags oraz htmlspecialchars, chodzi o to, że powiedzmy, że masz coś takiego:
Kod
<p style="text-align:center;">elo elo, joł ziomalek, <strong>co tam porabiasz</strong>, idź do domu, nie mam czasu, pomagam koledze na forum, bo mu się coś jebie ze skryptem, bla bla bla bla....</p>
I masz to pod zmienną powiedzmy $tresc
I teraz żeby tagi były "ojszczane" to robisz:
  1. <?php
  2. $ok_tresc_strip_tags = strip_tags($tresc); // to ci całkowicie wymaże tagi html
  3. $ok_tresc_htmlspecialchars = htmlspecialchars($tresc); // to ci można najprościej powiedzieć skonwertuje tagi html do ich zamienników, nie wiem czy Ci to potrzebnie wp
    rowadziłem, ale może się przyda
  4. ?>


P.S.: Może teraz Ci trochę pomogłem.
b_chmura
Cytat(in5ane @ 18.12.2007, 21:55:21 ) *
Masz taką fajną funkcję stip_tags oraz htmlspecialchars, chodzi o to, że powiedzmy, że masz coś takiego:
Kod
<p style="text-align:center;">elo elo, joł ziomalek, <strong>co tam porabiasz</strong>, idź do domu, nie mam czasu, pomagam koledze na forum, bo mu się coś jebie ze skryptem, bla bla bla bla....</p>
I masz to pod zmienną powiedzmy $tresc
I teraz żeby tagi były "ojszczane" to robisz:
  1. <?php
  2. $ok_tresc_strip_tags = strip_tags($tresc); // to ci całkowicie wymaże tagi html
  3. $ok_tresc_htmlspecialchars = htmlspecialchars($tresc); // to ci można najprościej powiedzieć skonwertuje tagi html do ich zamienników, ni
    e wiem czy Ci to potrzebnie wprowadziłem, ale może się przyda
  4. ?>


P.S.: Może teraz Ci trochę pomogłem.


skoro najpierw usunąłeś tagi to co później zamieniasz na znaki specjalne?...
poza tym autor tematu wyraźnie napisał ze to nie jest rozwiązaniem.

~pieto
Wiadomo ze w tekście nie możemy używać takich znaków specjalnych jak < i > dlatego w tekście są one unikalne i to właśnie między nimi jest kod html otaguj wszystko co znajduje sie między > i <
Kod
#>(.*?)<#si


Edit
Poczytaj także o preg_match_all" title="Zobacz w manualu PHP" target="_manual i preg_match" title="Zobacz w manualu PHP" target="_manual
in5ane
Cytat
skoro najpierw usunąłeś tagi to co później zamieniasz na znaki specjalne?...


Napisałem:
Cytat
nie wiem czy Ci to potrzebnie wprowadziłem, ale może się przyda
Po prostu chciałem mu zademonstrować i tą funkcję.
MMX3
po co prasować całego stringa...

DOM! jeżeli źródło jest na dziwach. To można sobie zrobić GetElementByID.... Szybkie proste przyjemne... Tak dane z naszej-klasy się ssie smile.gif bardzo ładnie tylko że powoli bo nasza klasa jest badziewna...
pieto
blee DOM do bani,
z php parsowanie bedzie wykoanane raz i zapisane do cache,
jesli mam 100.000 artykulow i kazda fraza z kazdego wywolania artykulu miala by byc analizowana na zywca to mysle ze serwer dlugo nie pozyje
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.