Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Szukanie w stringu zdania
Forum PHP.pl > Forum > Przedszkole
michuwsh
Cześć,

Zwracam się do was o pomoc bo nie wiem już jak poradzić sobie z moim przypadkiem. Napisałem Skrypt który za pomocą curl wchodzi na konkretną stronę pobiera jej zawartość a następnie na podstawie odpowiedzi przeprowadzą weryfikacje zwróconej treści.

  1. function checkUrl($url) {
  2. $ch = curl_init();
  3.  
  4. curl_setopt($ch, CURLOPT_USERAGENT, USER_AGENT);
  5. curl_setopt($ch, CURLOPT_URL, $url);
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  7. $output = [
  8. 'html' => curl_exec($ch),
  9. 'info' => curl_getinfo($ch)
  10. ];
  11.  
  12. curl_close($ch);
  13.  
  14. return $output;
  15.  
  16. }



Następnie za pomocą fragmentu kodu sprawdzam czy zawartość w tablicy znajduje się w kodzie html który znajduje się pod zmienną $response['html']

  1. //Check content
  2.  
  3. $content = '';
  4.  
  5. if ( !empty($value['content']) ) {
  6. if ( strpos($response['html'], $value['content'] ) !== false) ) {
  7. $content = 'Treść znajduje się na stronie!';
  8. }
  9.  
  10. }


Niestety podany fragment kodu nie zwraca mi poprawnie informacji czy zawartość w zmiennej $value['content'] znajduje się w zmiennej $response['html']. Czy jest ktoś chętny rozwiązać tą zagadkę?

nospor
zrob VAR_DUMP na tym co szukasz i na tym w czym szukasz.
michuwsh
  1. var_dump($string);
  2. var_dump($test['html']);


$string - zawiera to co szukam

$test['html'] - zawiera kod html

  1. string(147) "Co to ..."
  2. string(70129) "<!DOCTYPE html ...>



Zmienna $string zawiera się w zmiennej $test['html'] a strpos zwraca False
nospor
Nie widze tutaj

string(70129) "<!DOCTYPE html ...>

tego co szukasz. Prosze jeszcze raz, przeczytaj dokladnie tym razem:
podaj dokladnie to co zwraca VAR_DUMP dla tego co szukasz, oraz pokaz wycinek tego w czym szukasz, gdzie rzekomo szukany tekst sie znajduje. Inaczej mozemy bawic sie tak do rana. Mi nie zalezy
michuwsh
Przepraszam myślałem że chodzi tobie o typy danych czy są takie same, natomiast nie chciałem dawać całego kody html żeby nie spamować forum.

Natomiast wrzuciłem to na swój zdalny serwer http://serwer90650.lh.pl/checker/test.php - dodam że strona nie odpali się przez https trzeba po http
nospor
Wizualnie sie zgadza.
Po czym wnioskujesz ze nie znajduje? moze daj die('checking'); w tym IFie by miec pewnosc.
Jestes pewien ze kolejnosc parametrow jest ok w strpos?
Moze jakies biale znaki, ktorych nie widac?
michuwsh
Cytat
Po czym wnioskujesz ze nie znajduje? moze daj die('checking'); w tym IFie by miec pewnosc.


Zasadniczo to nic nie daje bo warunek nie jest spełniony.

Cytat
Jestes pewien ze kolejnosc parametrow jest ok w strpos?


Napewno jest dobrze

Cytat
Moze jakies biale znaki, ktorych nie widac?


Tutaj faktycznie może być coś na rzeczy. Dopisałem funkcje która ma usunać wszystkie spacje białe znaki z kodu html i okazało się że jakiś nie zdefiniowany znak występuje po znaku "-" ale nie umiem rozszyfrować co to za znak

  1. <sectionclass="post_content"itemprop="articleBody"><divclass="vc_rowwpb_rowvc_row-fluid"><divclass="wpb_columnvc_column_containervc_col-sm-12"><divclass="vc_column-inner"><divclass="wpb_wrapper"><h2style="text-align:left"class="vc_custom_heading">Cotojestubezpieczeniezdrowotne?</h2><divclass="wpb_text_columnwpb_content_element"><divclass="wpb_wrapper"><p>Cotoipocoubezpieczeniazdrowotne?&#8211; Dobrowolneubezpieczeniezdrowotne toubezpieczenieniezależneodsystemupublicznejopiekizdrowotnej.Ubezpieczeniezawier
    anemożebyćwdowolnymtowarzystwieubezpieczeniowymoferującymtegorodzajuprodukty.Wram
    achwykupionejpolisyklientuzyskujedostępdoprywatnychplacówekmedycznychwspółpracują
    cychzdanymubezpieczycielem.Umowazazwyczajzawieranajestnarokzopcjąprzedłużenianako
    lejnyokres.Składkaopłacanajestmiesięcznie.Kosztorazzakresubezp


albo tutaj można podejrzeć http://serwer90650.lh.pl/checker/test.php
trueblue
E2 80 93
https://www.fileformat.info/info/unicode/char/2013/index.htm

Za dużo jest nawiasów w drugim if.
michuwsh
Wykastrowałem tego stringa prawie ze wszystkiego ale ta spacja nadal tam jest

  1. <p>Cotoipocoubezpieczeniazdrowotne? Dobrowolneubezpieczeniezdrowotne toubezpieczenieniezależneodsystemupublicznejopiekizdrowotnej.Ubezpieczeniezawieranemożebyćwdowolnymtowarzystwieubezpieczeniowymoferującymtego
    rodzajuprodukty.Wramachwykupionejpolisyklientuzyskujedostępdoprywatnychplacówekmedycznychwspółpr
    acującychzdanymubezpieczycielem.Umowazazwyczajzawieranajestnarokzopcjąprzedłużenianakolejnyokres.Składkaopłacanajestmiesięcznie.Kosztorazzakresubezpieczeniazdrowotnegouzależnionyjestodrodzajuwybranegopakietu.</p>


Za pomocą:

  1. $test['html'] = str_replace("\t", '',$test['html']);
  2. $test['html'] = str_replace("\r", '',$test['html']);
  3. $test['html'] = str_replace("\n", '',$test['html']);
  4. $test['html'] = str_replace("\n\r", '',$test['html']);
  5. $test['html'] = str_replace(" ", '',$test['html']);
  6. $test['html'] = str_replace("\o", '',$test['html']);
  7. $test['html'] = str_replace(" ", '',$test['html']);
  8. $test['html'] = str_replace("–", '',$test['html']);
  9. $test['html'] = str_replace("–", '',$test['html']);
  10. $test['html'] = str_replace("–", '',$test['html']);
  11. $test['html'] = str_replace("&nbsp;", '',$test['html']);
  12.  
  13. function trim_all( $str , $what = NULL , $with = ' ' )
  14. {
  15. if( $what === NULL )
  16. {
  17. $what = "\\x00-\\x20"; //all white-spaces and control chars
  18. }
  19.  
  20. return trim( preg_replace( "/[".$what."]+/" , $with , $str ) , $what );
  21. }
  22.  
  23. $test['html'] = trim_all($test['html']);
  24.  
  25. $string = str_replace(" ", '', trim_all($string));
  26.  
  27. if (strpos($test['html'], $string) !== false) {
  28. echo 'true';
  29. }
  30.  
  31. echo $test['html'];



Nie wiem co to może być za znak.
trueblue
Podałem Ci informacje jaki to znak.
michuwsh
To nie ten znak jego również wywalam i nadal jest to łamanie do nowej lini

Udało się hura !

Pomocny wątek znalazł się niespodziewanie na tym forum pod adresem Temat: PHPUsuwanie wszystkiego co nie jest litera cyfra spacja

Generalnie podszedłem do tematu inaczej za pomocą wyrażenia regularnego wywaliłem z mojego html wszystko co nie jest literą. Następnie pozbyłem się spacji za pomocą str_replace te same operacje wykonałem na stringu szukanym aktualnie if zwraca true smile.gif
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.