Alt+Shift+horní„2”

Jazyk / Language

ČeskyEnglish

Skok dolů na unikátní obsah stránky


Styl zobrazení


Nástroje

Vyhledávání

(Skok sem: Alt+Shift+4)

Sdílet odkaz na stránku

Facebook e-mail Twitter Linkuj.cz Google Bookmarks

Citovat stránku

Citovat podle ČSN ISO 690 (jiný web, nový panel)

Co se kde děje?
– Novinky mimo web

  • 22.5.2013 19:30, Černilov:Promítání / cestopisná prezentace Na kolech z Náchoda do Monaka a zpátky.
    Kulturní dům Černilov
  • Kdo jste mi 25.3. a v noci na 26.3. posílal e-mail, pošlete mi ho znovu, protože všechny tyto zprávy byly chybou konfigurace smazány, aniž bych je viděl.
    All e-mail messagess sent to me on 25th March (and night after) were deleted by error, send it again if you have sent me something.
  • 8.6.2013, NáchodSraz šlapacích vozítek, zejména Moskvičů
    Šlapací Moskviče (jiný web, nový panel)

     

  • 25.9.2013 18 h, Hradec Králové:Promítání / cestopisná prezentace Na kolech z Náchoda do Monaka a zpátky.
    Studijní a vědecká knihovna HK

Jste tu opakovaně?
– Novinky na webu

Jste tu poprvé?
– Výběr z webu


Technologie

Validní XHTML 1.1 Validní CSS styly Nejvyšší úroveň přístupnosti pro nevidomé a slabozraké návštěvníky podle Blind Friendly Dogma W4D pro přístupnost a přehlednost webu Využito PHP5 Využito MySQL5 Využit Javascript Cookies

Prohlížeče a rozlišení

Stránka testována v prohlížečích

Různé prohlížeče (ilustrační obrázek převzat)
  1. FF
  2. MS IE 9
  3. Chrome
  4. Mini Opera
  5. MS IEM 7.1 ve WM 6.1

při 176x220 až 1680x1050 px (ne všechny kombinace).
Důraz na FF při 1280x1024 px.


PHP - Náhrada funkce explode - skript s více oddělovači slov současně
Rozdělení věty na slova; kontrola, oprava a cenzura oddělených slov; znovusestavení věty

Nacházíte se: Martin Adámek > Vlastní tvorba > Programy > PHP: Alternativa k funkci explode
 

 

Vytvořeno
23.3.2012

Potřeboval jsem se v PHP dostat na jednotlivá slova textového řetězce (rozdělit string na array), ale nestačilo mi větu na slova dělit jen podle mezer, jak se to obvykle s použitím funkce explode dělá, chtěl jsem definovat a použít pole více oddělovačů slov.

Abych izoloval i slova ukončená tečkou, čárkou, závorkou, vykřičníkem, apod.
Protože při postupném použití funkce explode s různými znaky by nebyla oddělena slova, která mají zleva jiný znak než zprava …což je častý případ – za slovem je čárka nebo tečka, ale před slovem je mezera – málokdy je ve větě slovo obklopené tečkami z obou stran, a když už tam je, tak je to stejně typografická chyba. Nemluvě o tom, že bychom pak měli pole polí (i když to se dá vyřešit spojením).

Nic hotového jsem nenašel, tak jsem si ten skript (alternativa k funkci explode) napsal a dávám ho dál…

Protože narozdíl od běžného postupu, kdy se funkcí explode rozdělí řetězec jen tam, kde je mezera
(a kde tedy při pozdějším slepování zpět víme, že mezi jednotlivá slova přijde vždy mezera),
jsem potřeboval uchovat i jednotlivé znaky mezi slovy, abych řetězec nepoškodil,
ukládám si ty oddělovače jako samostatná slova v poli.Pro moje použití to ničemu nevadilo.
Pokud by to vadilo vám, můžete si nalezené oddělovače ukládat do samostatného pole, nebo třeba zahazovat.
Pokud ale potřebujete větu na závěr zase slepit dohromady, komplikovalo by vám uložení oddělovačů v samostatném poli práci – takže je lepší nechat slova i oddělovače takto sypat do jednoho společného pole
– a pokud potřebujete zasahovat jen do slov, ne do oddělovačů, můžete si při procházení pole kontrolovat lichost/sudost (dělitelnost dvěma) pořadí každého prvku v poli.

Sice existují různé alternativy k funkci explode, a to třeba i pro více oddělovačů, ale tento můj skript narozdíl od jiných řešení (alespoň těch, která jsem našel) zachová informaci o původních oddělovačích.
Je tedy určen pro rozebrání věty na slova, kontrolu/opravu/cenzuru jednotlivých slov a opětovné slepení věty se zachováním původních oddělovačů (tečky, čárky, závorky, uvozovky, apod.).

 
//Rozdělení textového řetězce na prvky pole - náhrada funkce explode - pro více oddělovačů současně
//Martin Adámek, www.adamek.cz

/////////////////////////////////////
//$oddelovace              Pole obsahující jednoznakové oddělovače (Dvouznakové oddělovače jsou definované níže, přímo v kódu) 
//$co                      Textový řetězec, který chcete rozsekat na jednotlivá slova
//                         Na závěr se jednotlivě upravená slova slepí zpět zase do této proměnné
//$polekontrolovanychslov  Pole, do kterého se jednotlivá izolovaná slova uloží
///////////////////////////////////// 


$oddelovace=array(" ", ".", ",", ";", "-", "?", "!", "_", ":", "(", ")", "/");
$slovo=""; $polekontrolovanychslov=array();


// Rozsekání řetězce (věty) na slova

for ($i=0; $i<strlen($co);$i++)
  {
    if (substr($co,$i,2)=="\\\"" or substr($co,$i,2)=="\\\\" or substr($co,$i,2)=="\\'") 
      {$polekontrolovanychslov[]=$slovo; $polekontrolovanychslov[]=substr($co,$i,2); $slovo="";$i++;}
      //odhalení zpětným lomítkem vyescapovaných znaků - zpětného lomítka i obou typů uvozovek   
    
    elseif (in_array($co[$i], $oddelovace))
      {$polekontrolovanychslov[]=$slovo; $polekontrolovanychslov[]=$co[$i]; $slovo="";}
    
    else
      {$slovo.=$co[$i];}        
  }
$polekontrolovanychslov[]=$slovo;
unset($slovo);

/*
V tomto místě je celý rozkouskovaný řetězec uložen v poli $polekontrolovanychslov ,
pro některé aplikace můžete zbytek kódu ignorovat a výše uvedený kód si hodit do funkce.
*/ 


// Kontrola, úprava, oprava či jiná cenzura jednotlivých slov       

foreach ($polekontrolovanychslov as &$prvek) 
  { if ($prvek=="AZeMeNenajdes") $prvek="NaselJsemTe";
    /* Tady si s každým izolovaným slovem udělejte, co potřebujete. */
  } 
unset($prvek);


// Pospojování opravených slov zpět do jednoho řetězce (zcenzurované věty)

$co=implode("",$polekontrolovanychslov); 
  //Protože patřičné oddělovače jsou uloženy jako samostatná slova (prvky pole), můžeme pro znovuspojení řetězce použít běžnou funkci implode
  //a jako lepidlo (což obvykle bývá mezera, podle které funkce explode řetězec rozdělila) nastavit prázdný řetězec. 

/*
V proměnné $co máme opravenou větu jako jeden textový řetězec.
*/

Řetězec tak máme zase pohromadě v jedné stringové proměnné, ale hledaná slova jsme upravili, jak jsme potřebovali.
Například jsme je mohli porovnat se seznamem sprostých slov a nahradit je hvězdičkami.

Tento algoritmus tedy můžete použít např. jako základ skriptu pro filtrování vulgárních slov v diskuzích a komentářích, potřebujete-li naprogramovat filtr sprostých slov.

 

Skok nahoru na navigační menu

Pro rozptýlení

Na hotline volá užívateľ, že sa mu nedá do mechaniky vložiť tretia inštalačná disketa. Technik sa po dlhšom premýšľaní pýta:
 - „Počujte, a vybrali ste vôbec tú druhú?”
 - „Nie. A to mi pripomína, že tá tam išla už tiež nejako ťažko...””

Pro zamyšlení

Moc vždy zotročí člověka, který ji drží v ruce.
[Voltaire]


 

(c) Ing. Martin Adámek, www.adamek.cz , Náchod

Skryté počítadlo