Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Zbędne łamanie url - jak zapobiec?
Forum PHP.pl > Forum > Przedszkole
b_chmura
Witam
Napotkałem dziś na mały problem...
chcąc uniknąć złośliwość niektórych internautów zastosowałem łamanie dłuższego ciągu znaków jak xxx.
Problem pojawia się gdy dodałem notyfikację adresów mail i url... jak wiadomo bardzo często adresy są długie a więc i one będą "łamane".
Jak zapobiec takiemu problemowi?

Bardzo proszę o pomoc:)

Pozdrawiam was i wasze rodziny
Cezar708
no jeśli chodzi o zwykłe słowa to uważam że łamaniem linii powinien już zająć się sam HTML. Natomiast jeśli chodzi o o długie linki to probonuję rozwiązanie:

  1. <?php
  2. function truncate_text($input_text, $max_size=40){
  3. if ( strlen($input_text) > 40 ){
  4. $return substr ( $input_text, $start=0, $length=$max_size )."...";
  5. } else {
  6. return $input_text;
  7. }
  8. }
  9.  
  10. echo "<a href='$url'>".truncate_text($url)."</a>";
  11. ?>
Cysiaczek
Popraw proszę tytuł topiku na zgodny z zasadami forum Przedszkole - to już drugi raz dzisiaj. te tagi mają sens - naprawdę.

Sprawdzaj wystapienie spacji - w adresie URL ich nie ma, więc możesz rozpoznać w ten sposób. Inaczej. Adres URL zaczyna się np. od http:// a kończy się znakiem spacji. Obliczasz długość adresu i jeśli przekracza pozostała do końca lini ilość znaków, to przed nim dajesz łamanie lini. Ewentualnie możesz pokusić się o wizualne skrócenie adresu.

Pozdrawiam.
b_chmura
wasze sposoby sprawdzały by sie jednie gdy podałbym sam adres url lub w teksie jakikolwiek url występowałby tylko raz

Myślę że sprawdzonym sposobem byłoby niwelowanie znaków nowej linii wyrażeniami regularnymi. Przykładowo w funkcji
  1. <?php
  2. function pozamieniaj($co)
  3. {
  4.  //najpierw łamiemy wszytki długie ciągi znaków
  5.  $co = wordwrap($co, 20, "\n", 1);
  6.  $co = preg_replace('jakieś wyrażenie któro zniweluje "\n" i sprawdzi czy ciąg znaków ma strukturę adresu url','<a href="//1">link</a>',$co);
  7. }
  8. ?>

tylko nie mam zielonego pomysłu jak zniwelować \n... jakieś pomysły?



EDYTOWANO
Usunąłem zbędne <br />

EDIT:
Rozwikłałem już problem smile.gif
  1. <?php
  2. if (!eregi('/(http://|https://|ftp://|news://|www.)([a-zA-Z0-9@#%&_=~?/.-si]+)([a-zA-Z0-9si]{2,4})/' , $co)) 
  3. {
  4. $co = wordwrap($co, 22, "\n", 1);
  5. }
  6. ?>
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.