Vytváranie liniek v texte pomocou PHP

Dnešný článok obsahuje ďalší PHP trik a tým je vytváranie html liniek v obyčajnom texte pomocou PHP. Je to len moja jednoduchá funkcia a vytvára linky len pre URL, ktoré sa začínajú reťazcom http://.

Na vytváranie liniek v texte som si napísal funckiu create_links(), ktorá je jednoduchá, ale funkčná. Tu je jej kód:

function create_links($str) { 
  preg_match_all('|(http://[^ \n]*)|s', $str, $a);
  /* 
  $a[1] je pole všetkých nájdených URL a funckia array_unique() nám zabezpečí, 
  aby sa linky vytvorili korektne, aj keď bude v texte niektorá URL viac krát
  */
  $a[1] = array_unique($a[1]);
  /* každú nájdenú URL nahradíme odkazom */
  foreach($a[1] as $url) {
    $str = str_replace($url, '<a href="' . $url . '">' . truncate($url, 40) . '</a>', $str);
  }
  return $str;
}

Ako som spomínal funkcia je veľmi jednoduchá a vytvára linky len pre URL začínajúce sa reťazcom http://. Takisto funkcia nevie ošetriť napríklad to, keď je URL zadaná ako posledné slovo vo vete a za ňou na sleduje bodka. Vtedy sa bodka stane súčasťou odkazu…

Ak by ste však mali záujem o väčšiu funkcionalitu tak vám odporúčam použiť google a hľadať reťazec make clickable +php a isto toho nájdete viac než dosť.

Skrátenie reťazca v PHP

A ak ste boli pozorní, tak ste si isto všimli, že vo vnútri funkcie create_links() používam ďalšiu moju funkciu truncate(), ktorá skráti reťazec (v našom prípade url) na požadovanú dĺžku a pridá na koniec reťazca ‚…‘. Tu je jej kód:

function truncate($str, $width) {
  if(mb_strlen($str, 'UTF-8') <= $width)
    return $str;
  $rstr = mb_strimwidth($str, 0, $width - 3, null, 'UTF-8'); // treba nastaviť správne kódovanie
  $rstr .= '...';
  return $rstr; 
}

A čo WordPress ?

Ak chcete danú a ešte komplexnejšiu funcionalitu využiť vo WordPresse, tak môžete rovno použiť funckiu make_clickable(), ktorá je súčasťou jeho API, avšak ak by ste ju chceli použiť samostatne vo vašom kóde mimo WordPressu, tak vám, želám veľa nervov, pretože závisí na mnohých iných WordPress funckiách ;).

Pridajte sa do konverzácie

1 komentár

Zanechať komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *