Autor Zpráva
radozaj
Profil
takto vyzerá reťazec na začiatku:
----------------------------------------------------------------------
| $retazec = "Ahoj,
| práve píšem nejaký text.
|
| Mobil: to je dobrá vec.
|
| Auto: to je drahá vec.";
----------------------------------------------------------------------

A potrebujem z toho reťazcu spraviť niečo takéto:
----------------------------------------------------------------------
| $retazec = "Ahoj,
| práve píšem nejaký text.
|
| <h4>Mobil:</h4> to je dobrá vec.
|
| <h4>Auto:</h4> to je drahá vec.";
----------------------------------------------------------------------

Ako to spraviť? Tento príkaz nestačí, lebo text navyše vymaže:
$retazec = ereg_replace("

(.*):","<h4></h4>",$retazec);
DFly
Profil
$retazec = ereg_replace("(.*):","<h4></h4>",$retazec);

to je prece jasny, kdyz to nahradis prazdnymy tagy
podivej se do manualu
djlj
Profil
$retazec = preg_replace("(.*):","<h4>\\1</h4>",$retazec);
loyza
Profil
Tak já se přidám a také nabídnu řešení problému:

$retazec = ereg_replace('[[:space:]]([^[:space:]]*):',"<h4>\1:</h4>",$retazec);
tajny spion
Profil
DFly, djlj, loyza
Mám něco podobného... mám mrtě dlouhý soubor plný textu a potřebuji, vždy každé určité slovo zvýraznit. Jde to i jinak než ručně? Myslím tímto způsobem... moc tomu totiž nerozumím :(

PS: Řekněme, že to slovo je třeba "Popis"
djlj
Profil
$text=str_replace("Popis", "<b>Popis</b>", $text);
radozaj
Profil
Ani jedno mi nefunguje poriadne tak, ako by malo. Potrebujem najskôr nájsť text, to je text od dvoch prechodov na nový riadok, až po prvú dvojbodku. A nahradiť ho hľadaným textom, ktorý je medzi <h4> </h4>. Čiže: niečo ako $retazec = ereg_replace("\r\n\r\n(.*):","<h4>\1</h4>",$retazec);
ale nie je to ono, pretože to označuje až po poslednú dvojbodku.... Ako teda?
Alphard
Profil
radozaj
já bych měl ještě poznámku k předchozímu tématu (je zamčené)
možná by byla vhodnější funkce nl2br()
radozaj
Profil
Alphard
možná by byla vhodnější funkce nl2br()
Áno, je lepšia, ale ja by som to potreboval práve na tento prípad, keď z textu hľadám "\r\n\r\n text :" a nahradzujem "<h4> text: </h4>" Problém je však v tom, že mi to berie až po poslednú dvojbodku v texte, a ja by som chcel, aby to bral len po prvú dvojbodku od tých dvoch prechodov na nový riadok. Takže
$retazec = ereg_replace("\r\n\r\n(.*):","<h4>\\1:</h4>",$retazec);
nefunguje podľa mojich predstáv a
$retazec = ereg_replace('[[:space:]]([^[:space:]]*):',"<h4>\\1:</h4>",$retazec);
to robí troška inú vec: označuje slovo iba jedlo a to také slovo, čo je pred dvojbodkou, takže ani to nie.

Poradíte ešte iný spôsob?
radozaj
Profil
oprava jedlo = jedno
radozaj
Profil
Alebo mi aspoň napíšte, kde si prečítať návod čo tie znaky znamenajú: [:space:] , (.*) , \\1 ...
Približne viem, ale... radšej to vidieť.
Alphard
Profil
http://www.regularnivyrazy.info/shrnuti-syntaxe.html
ale nevím, jestli to povede k řešení, kdybych ho znal, tak ti ho napíši
tajny spion
Profil
djlj
Ty krávo vono to fakt jede! (Respekt!)

Btw s tím souvisí moje druhá otázka:
Teď musím mít tím pádem obsah stránky (v main sloupci) v nějaké proměnné řekněme v $text, že mám pravdu... vypadá to tedy nějak takto:

<?php
$text = 'nějaký dlouhý obsah stránky obsahující slovo silnice, které ztučníme';

$text = str_replace("silnice", "<b>silnice</b>", $text);

if (!$text) /* to mě jen tak napadlo zkontrolovat - možná je to blbost - pls názor */
echo "Litujeme, ale stránku nelze zobrazit";
else
echo $text;
?>

Teď k výše zmiňované otázce: zaindexují vyhledávače takový text ($text), když ho budu vypisovat z DB?
djlj
Profil
Teď musím mít tím pádem obsah stránky (v main sloupci) v nějaké proměnné
Je tak.

to mě jen tak napadlo zkontrolovat - možná je to blbost - pls názor
Když chceš…

zaindexují vyhledávače takový text ($text), když ho budu vypisovat z DB?
Vyhledávačům je stejně jako uživatelům šumafuk, jestli bereš data z databáze, ze souboru nebo třeba z Marsu. Navíc to ani nepoznají.
loyza
Profil
Hoši, možná by neškodilo kdybyste si ke své otázce založili vlastní téma. V tuhle chvíli už se tady motají tři témata dohromady.

Zpátky k původnímu tématu. Podle původního příkladu to nevypadalo, že před dvojtečkou může být slov více ;) Tak jsem zkusil tohle, mohlo by to fungovat. Na tom řetězci co jsi sem poslal to jede.

$retazec = ereg_replace('[[:cntrl:]][[:cntrl:]]([^[:cntrl:]]*):','<h4>1:</h4>',$retazec);
tajny spion
Profil
djlj
<OT>
Vyhledávačům je stejně jako uživatelům šumafuk, jestli bereš data z databáze, ze souboru nebo třeba z Marsu. Navíc to ani nepoznají.
Takže vyhledávač si zobrazí stránku stejně jako uživatel, tím pádem ten text bude vidět? Mám totiž pocit, že jsem tu někde zaslechl, že když jsou na webu texty brány z DB, vyhledávač ne nezaregistruje.

Rešení: Redakční systém - bohužel nevím co to je

PS: Jaký je rozdíl mezi RS (Redakční systém) a RSS?
lagin
Profil
Vyhledavač zaregistruje kód, který je vygenerován a tudíž vydí to co uživatel. Nikdo, ani vyhledavače nevidí tvé zdrojové kódy v PHP, či jakémkoli jiném jazyce. Prostě vždy soubory projdou interprtem a ty vydíš, jen výsledná data.

Redakční systém. To je jakýsi ucelený web, kde jsou různé sekce, např, fórum, správa uživatelů, fotogalerie, cokoli chceš. Je jich na netu spousta free.

Technologie RSS umožňuje uživatelům Internetu přihlásit se k odběru novinek z webu, který nabízí RSS zdroj. Tudíž to není RS.

Text o RSS převzat z wiki.
djlj
Profil
tajny spion
To by byla pěkná bezpečnostní chyba :). To by se hnedka všichni maskovali jako vyhledávač, aby se dostali lidem do databáze ;).

Mám totiž pocit, že jsem tu někde zaslechl, že když jsou na webu texty brány z DB, vyhledávač ne nezaregistruje.
V tom případě by nebyla dohledatelná drtivá většina stránek.
tajny spion
Profil
djlj
ok, Dik

lagin
Takže RS je něco jako zjednodušená verze aktuálního webu? Bez všech možných blbostí? Nebo k čemu to tedy je?
lagin
Profil
tajny spion: za RS povazuji jakykoli rozsahlejsi web. :) i kdyz treba mini RS.
radozaj
Profil
Alphard
Vďaka za tú stránku, aj keď tam úplne všetky výrazy nie sú, ale stačí mi to.

loyza
Vďaka za to druhé riešenie, ale zistil som, že radšej to dám od počtu prechodov na nový riadok 1 a viac. A navyše ešte tam dá do nahraďovaného na začiatok prechod na nový riadok, takže trochu som to upravil:
$retazec = ereg_replace('[[:cntrl:]]+([^[:cntrl:]]*):','\n<h4>\1:</h4>',$retazec);

Už to skoro je ono, ale ešte sa stáva, že berie až tú druhú dvojbodku, napr. keď mám takéto niečo:
-----------------------------------
| $string = "Text text text.      |
|                                 |
| mobil: to je: dobra vec.";      |
-----------------------------------

spraví toto:
----------------------------------------
| $string = "Text text text.           |
|                                      |
| <h4>mobil: to je:</h4> dobra vec.";  |
----------------------------------------

Takže to berie až po druhú dvojbodku. Neviem ako by sa to dalo spraviť, azda tak, že by ten ľubovolný znak medzi x prechodmi na nový riadok (však nie 0) a dvojbodkou nesmel obsahovať dvojbodku?
No však neviem, ako to opraviť....
radozaj
Profil
loyza
Tak zapojil som hlavu, použil som aj tú stránku, čo mi ukázal Alphard a nakoniec to konečne funguje. Príkaz vyzerá takto:
$retazec = ereg_replace('[[:cntrl:]]+([^[:cntrl:]:]+):','\n<h4>\\1:</h4>',$retazec);


all
vďaka všetkým, čo ste sa mi snažili pomôcť, už to konečne funguje podľa mojich predstáv.
loyza
Profil
Proč mi tam to lomítko nezůstalo a tobě jo? Já ho tam měl taky. :( Bacha na to, pokud ten regulární výraz dáváš do uvozovek tak tam patří dvě lomítka a když to dáš do apostrofů tak tam patří lomítka dvě. Mluvím o těch obrácených lomítkách v tom replacementu.
radozaj
Profil
loyza
používam úvodzovky a dve spätné lomítka a funguje to.
Tie lomítka aj mne nejak bugujú, ale proste som napísal 4 lomíka a ono to zobrazilo 2.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0