Autor Zpráva
Alois Marhoul
Profil *
Ahoj

Potřeboval bych skript, který by text před vystavením na web prošel a pokud v něm najde řetezec z pole, pak s tímto řetězcem něco provedl.
Například máme publicistický článek s polemikou nad novým prezidentem. Pokud se v tomto článku objeví řetězec "Václav Klas" rád bych jej uzavřel do tagů <a> a přidal tak odkaz na jeho životopis. V databázi by tedy vedle klasické tabulky článků byla navíc tabulka linkovaných řetězců například ve tvraru:

id int
retezec char
url char

Nevíte o již hotovém skriptu? Nebo jak jednoduše na to?
T1000
Profil
zkus příkaz str_replace
Alois Marhoul
Profil *
jak zajistím aby se ignoroval rozdíl malá/velká písmena? Tedy "Václav Klaus" je stejné jako "václav klaus".
Kcko
Profil
v PHP5 to bude str_ireplace();
v PHP4 asi jen pres regularni vyrazy (perl)
one
Profil
$prezident_small = StrToLower($prezident);
->převede Václav klaus na václav klaus, prostě všechna velká písmena na malá

takže pokud chceš nějakou podmínku, kde to budeš chtít porovnat, tak tam hoď $prezident_small a v echu hoď jen $prezident a tím docílíš, že ve výstupu to budeš mít takto: Václav klaus...

samozřejmě je více řešení, tohle možná není nejlepší, ale k zahození taky není, můžeš si počkat na "odborníky", protože ja se teprve php učím :).
Alois Marhoul
Profil *
díky

A ještě jedna vychytávka, kterou jsem si teď uvědomil.

jak ošetřit aby se toto nahrazení nedělo v případě, už tam ten odkaz vložil ručně redaktor. Tedy rozšířený řetězec má tvar ...>Václav Klaus</a>
bukaj
Profil
jak ošetřit aby se toto nahrazení nedělo v případě, už tam ten odkaz vložil ručně redaktor. Tedy rozšířený řetězec má tvar ...>Václav Klaus</a>
na to by to už chtělo ty regulární výrazy. zde je odkaz na fci preg_replace(), a zde shrnutí syntaxe. popř. seriál na intevalu.
Alois Marhoul
Profil *
takže třeba takto?


$patterns[] = "/(Václav Klaus)$/i ?(?!< ?/a ?>)"; //ignoruji velká malá píslema //kontroluji zda za prohledávaným řetězcem není "< /a >", včetně možných mezer
$patterns[] = "/(Václav Havel)$/i ?(?!< ?/a ?>)";
$replacement[] = "<a href="http://www.klaus.cz" >\1</a>";
$replacement[] = "<a href="http://www.havel.cz" >\1</a>";

echo preg_replace($pattern, $replacement, $text_clanku);

definice polí $patterns a $replacement budu doplňovat cyklem podle obsahu tabulky nahrazovaných retezcu v DB.

je tam někde chyba...
bukaj
Profil
je tam někde chyba...
pokud to bylo konstatování, nezbývá než souhlasit. pokud otázka, tak odpověď zní ano.

$patterns[] = "/(Václav Klaus)(?!<\a>)/i";
$patterns[] = "/(Václav Havel)(?!<\a>)/i";

v $replacement by vše mělo být dobře. (předpokládám, že fórum opět sežralo zpětná lomítka.)
Alois Marhoul
Profil *
funguje díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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