Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt zamienia adresy url na linki ale tnie te ze znakiem & (AND)
Forum PHP.pl > Forum > PHP
Kamin
Cześć!
Właśnie kłopoczę się z problemem ucinania URLa przez skrypt bądź przez serwer (zabezpieczenia).
Skrypt ten znajduje i zamienia adresy url w tekście na linki, co działa pięknie, ale po przesłaniu linka na drugi serwer, ucina mi niektóre linki. Te linki, w których znajduje się znak & (AND). Skrypt ten znalazłem na skptricks.
Jeżeli ktoś znajdzie chwilę i pochyli się nad moim kłopotliwym temate, z góry dziękuję.


Plik index1.php działający lokalnie i znajdujący się na pierwszym serwerze i który działa pięknie:
  1. <?php
  2. function Convert_link_to_urls2($text = '')
  3. {
  4. $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);
  5. $finaltext = ' ' . $text;
  6. $finaltext = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<span class='ccc'><a href=\"\\2\" target=\"_blank\"><font style='font-family: Verdana, Geneva, sans-serif;color: blue;font-size:13px; line-height:20px;'>\\2</font></a></span>", $finaltext);
  7. $finaltext = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<span class='ccc'><a href=\"http://\\2\" target=\"_blank\"><font style='font-family: Verdana, Geneva, sans-serif;color: blue;font-size:13px; line-height:20px;'>\\2</font></a></span>", $finaltext);
  8. $finaltext = substr($finaltext, 1);
  9. return $finaltext;
  10. }
  11. $text='welcome to skptricks : <a href="https://duckduckgo.com/?t=ffcm&q=Zakopane+pole+namiotowe+i+pokoje+Mostowi&iax=images&ia=images';" target="_blank">https://duckduckgo.com/?t=ffcm&q=Zakopa...ia=images';</a>
  12. echo Convert_link_to_urls2($text);
  13. ?>


Plik index2.php znajdujący się na pierwszym serwerze ale przekazujący link na drugi serwer, i który tnie linki ze znakiem & (AND):
  1. <?php
  2. function Convert_link_to_urls1($text = '')
  3. {
  4. $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);
  5. $finaltext = ' ' . $text;
  6. $finaltext = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<span class='ccc'><a href=\"http://drugi.server.pl/redirect.php?link=\\2\" target=\"_blank\"><font style='font-family: Verdana, Geneva, sans-serif;color: blue;font-size:13px; line-height:20px;'>\\2</font></a></span>", $finaltext);
  7. $finaltext = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<span class='ccc'><a href=\"http://drugi.server.pl/redirect.php?link=http://\\2\" target=\"_blank\"><font style='font-family: Verdana, Geneva, sans-serif;color: blue;font-size:13px; line-height:20px;'>\\2</font></a></span>", $finaltext);
  8. $finaltext = substr($finaltext, 1);
  9. return $finaltext;
  10. }
  11. $text='welcome to skptricks : <a href="https://duckduckgo.com/?t=ffcm&q=Zakopane+pole+namiotowe+i+pokoje+Mostowi&iax=images&ia=images';" target="_blank">https://duckduckgo.com/?t=ffcm&q=Zakopa...ia=images';</a>
  12. echo Convert_link_to_urls1($text);
  13. ?>




Plik redirect.php znajdujący się na drugim serwerze, a jego działaniem jest pobranie w zmiennej przekazanego linku i uruchomienie go:
  1. <?php
  2. $link = urldecode($_GET['link']);
  3. ?>
  4. <html>
  5. <head>
  6. <script type="text/javascript">
  7. var my_var = <?php echo json_encode($link); ?>;
  8. function page_redirect() {
  9. window.location = my_var;
  10. }
  11. setTimeout('page_redirect()', 3000);
  12. </script>
  13. </head>
  14. <body>
  15. <?php echo 'Redirect to...<br>'.$link; ?>
  16. </body>
  17. </html>
trueblue
Skoro stosujesz urldecode, to zastosuj również urlencode.
Kamin
Cytat(trueblue @ 12.07.2021, 12:08:15 ) *
Skoro stosujesz urldecode, to zastosuj również urlencode.


dodałem urlencode w drugiej linii tego wyrywku kodu:
  1. $finaltext = substr($finaltext, 1);
  2. $finaltext = urlencode($finaltext);
  3. return $finaltext;


ale otrzymałem to:
Cytat
welcome+to+skptricks+%3A+%3Cspan+class%3D%27ccc%27%3E%3Ca+href%3D%22https%3A%2F%2Fduckduckgo.com%2F%3Ft%3Dffcm%26q%3DZakopane%2Bpole%2Bnamiotowe%2Bi%2Bpokoje%2BMostowi%26iax%3Dimages%26ia%3Dimages%22+target%3D%22_blank%22%3E%3Cfont+style%3D%27font-family%3A+Verdana%2C+Geneva%2C+sans-serif%3Bcolor%3A+blue%3Bfont-size%3A13px%3B+line-height%3A20px%3B%27%3Ehttps%3A%2F%2Fduckduckgo.com%2F%3Ft%3Dffcm%26q%3DZakopane%2Bpole%2Bnamiotowe%2Bi%2Bpokoje%2BMostowi%26iax%3Dimages%26ia%3Dimages%3C%2Ffont%3E%3C%2Fa%3E%3C%2Fspan%3E


Dodatkowo zamieniłem w redirect.php
  1. $link = urldecode($_GET['link']);

na
  1. $link = $_GET['link'];

ale problemu to nie rozwiązało.
trueblue
A co otrzymujesz w pliku redirect.php po zastosowaniu funkcji urldecode?

P.S. Dlaczego do skryptu wysyłasz tekst już z anchorami, a nie samymi adresami URL? Mam na myśli ten fragment:

  1. $text='welcome to skptricks : <a href="https://duckduckgo.com/?t=ffcm&q=Zakopane+pole+namiotowe+i+pokoje+Mostowi&iax=images&ia=images';" target="_blank">https://duckduckgo.com/?t=ffcm&q=Zakopa...ia=images';</a>

Kamin
Cytat(trueblue @ 12.07.2021, 12:43:54 ) *
A co otrzymujesz w pliku redirect.php po zastosowaniu funkcji urldecode?


Otrzymuję:
Cytat

Czyli ucięło mi od & (ANDa).

Cytat(trueblue @ 12.07.2021, 12:43:54 ) *
P.S. Dlaczego do skryptu wysyłasz tekst już z anchorami, a nie samymi adresami URL? Mam na myśli ten fragment:

  1. $text='welcome to skptricks : <a href="https://duckduckgo.com/?t=ffcm&q=Zakopane+pole+namiotowe+i+pokoje+Mostowi&iax=images&ia=images';" target="_blank">https://duckduckgo.com/?t=ffcm&q=Zakopa...ia=images';</a>


Wysyłam całość w zmiennej, bo nie potrafię oddzielić tekstu od urla.
Znalazłem skrypt, który znajduje wszystkie url w całym tekście i zamienia je na takie do kliknięcia.
To wszystko robię na adresie, który ma być niewidoczny dla odbiorcy, czyli po stronie serwera, na który kieruje link.

A może da się jakoś podmienić & (ANDy) w pliku index2.php, a redirect.php odmienić za pomocą funkcji preg_replace();?

Udało mi się zmienić "&" na tymczasowy ciąg znaków: "zamianaandchange", które to kod znalazłem na php net.

  1. <?php
  2. $string = 'http://drugi.serwer.pl/redirect.php?link=https://duckduckgo.com/?t=ffcm&q=Zakopane+pole+namiotowe+i+pokoje+Mostowi&iax=images&ia=images';
  3. $patterns = array();
  4. $patterns[0] = '/&/';
  5. $replacements = array();
  6. $replacements[0] = 'zamianaandchange';
  7. $string_output = preg_replace($patterns, $replacements, $string);
  8. echo $string_output;
  9. ?>


A to musze wrzucić do redirect.php
  1. <?php
  2. $string2 = $string_output ;
  3. $patterns = array();
  4. $patterns[0] = '/zamianaandchange/';
  5. $replacements = array();
  6. $replacements[0] = '&';
  7. $string_output2 = preg_replace($patterns, $replacements, $string2);
  8. echo $string_output2;
  9. ?>


Zadziałało. ale kod jest moim zdaniem za bardzo rozbudowany. Muszę go zminimalizować.
trueblue
Cytat(Kamin @ 12.07.2021, 13:16:20 ) *
Wysyłam całość w zmiennej, bo nie potrafię oddzielić tekstu od urla.

Nie bardzo rozumiem. Przecież w tym fragmencie jest już URL zamieniony na link.

Podam Ci prosty przykład.

  1. $a = 'a=1&2'; // wartość zmiennej zawierająca "&"
  2.  
  3. $a = urlencode($a); //kodujemy wartość, bo będzie przesyłana metodą GET wraz z innymi zmiennymi (łączonymi "&")
  4.  
  5. $a = urldecode($a); //odbieramy wartość i dekodujemy

Kamin
Cytat(trueblue @ 12.07.2021, 13:21:16 ) *
Nie bardzo rozumiem. Przecież w tym fragmencie jest już URL zamieniony na link.

Podam Ci prosty przykład.

  1. $a = 'a=1&2'; // wartość zmiennej zawierająca "&"
  2.  
  3. $a = urlencode($a); //kodujemy wartość, bo będzie przesyłana metodą GET wraz z innymi zmiennymi (łączonymi "&")
  4.  
  5. $a = urldecode($a); //odbieramy wartość i dekodujemy


Rozumiem działanie Twojego przykładu, który działa na linkach, ale niestety po kilku próbach w kodzie, który ja podałem nie mogę znaleźć miejsca w funkcji Convert_link_to_urls1() aby zaimplementować urlencode().
trueblue
  1. $string = 'http://drugi.serwer.pl/redirect.php?link=' . urlencode('https://duckduckgo.com/?t=ffcm&q=Zakopane+pole+namiotowe+i+pokoje+Mostowi&iax=images&ia=images');
Kamin
Cytat(trueblue @ 12.07.2021, 15:01:38 ) *
  1. $string = 'http://drugi.serwer.pl/redirect.php?link=' . urlencode('https://duckduckgo.com/?t=ffcm&q=Zakopane+pole+namiotowe+i+pokoje+Mostowi&iax=images&ia=images');


Niestety, ale nie udało mi się tego razem skleić w poniższym kodzie.

  1. $finaltext = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://drugi.serwer.pl/redirect.php?link=http://\\2\" target=\"_blank\">\\2</a>", $finaltext);
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.