Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie danych i krzaki
masterix
post
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 7.09.2004

Ostrzeżenie: (0%)
-----


Witam,

Pobieram sobie dane za pomocą cURL'a ze strony, która ma ustawione kodowanie znaków na windows-1250. W bazie mam ustawione wszystko na latin2( do tej bazy zapisuję pobrane dane ). No i jak pobieram z bazy to na stronie mam krzaczki ( kodowanie iso-8859-2 ). Dałem zapytanie tuż po połączeniu z bazą:
Kod:
  1. SET CHARSET latin2

ale to niewiele pomogło.

Czy można coś na to poradzić? Czy jestem zmuszony zmienić kodowanie na swojej stronie i w bazie danych?

pzdr.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
masterix
post
Post #2





Grupa: Zarejestrowani
Postów: 93
Pomógł: 0
Dołączył: 7.09.2004

Ostrzeżenie: (0%)
-----


Sytuacja się nieco zmieniła. Teraz mam wszędzie UTF-8 w bazie danych( utf8_polish_ci ). Pobieram ze strony, która ma kodowanie windows-1250 i po pobraniu konwertuję od razu:
  1. <?php
  2. $name =  iconv( "CP1250", "UTF-8", $title .' - ' .$names[0] );//mb_convert_encoding( $title .' - ' .$names[0], "UTF-8" );//
  3. ?>
W komentarzu inny sposób, który nie działał. Zamiast CP1250 dawałem też windows-1250 z tym samym efektem niestety.

Jakieś pomysły?

@misiek: a masz taką 'bazę' krzaczków, żebym wiedział co na co podmienić ?

Daję cały kod:
  1. <?php
  2. //session_start();
  3. require_once( '../inc/config.php' );
  4. function convert( $strString )
  5. {
  6. $win2utf = array(
  7. "xb9" => "xc4x85", "xa5" => "xc4x84",
  8. "xe6" => "xc4x87", "xc6" => "xc4x86",
  9. "xea" => "xc4x99", "xca" => "xc4x98",
  10. "xb3" => "xc5x82", "xa3" => "xc5x81",
  11. "xf3" => "xc3xb3", "xd3" => "xc3x93",
  12. "x9c" => "xc5x9b", "x8c" => "xc5x9a",
  13. "xbf" => "xc5xbc", "x8f" => "xc5xbb",
  14. "x9f" => "xc5xba", "xaf" => "xc5xb9",
  15. "xf1" => "xc5x84", "xd1" => "xc5x83"
  16. );
  17.  
  18. return strtr( $strString, array_flip( $win2utf ) );
  19. }
  20. $base_addr = 'http://bap-psp.lex.pl/serwis/kodeksy/akty/';
  21. $addr_array = array( '64.9.59.htm' => 'Kodeks rodzinny i opiekuńczy', 
  22. '64.16.93.htm' => 'Kodeks cywilny',
  23. '64.43.296.htm' => 'Kodeks postępowania cywilnego',
  24. '71.12.114.htm' => 'Kodeks wykroczeń',
  25. '97.78.483.htm' => 'Konstytucja RP',
  26. '97.88.553.htm' => 'Kodeks karny',
  27. '97.89.555.htm' => 'Kodeks postępowania karnego',
  28. '97.90.557.htm' => 'Kodeks karny wykonawczy',
  29. '98.21.94.htm' => 'Kodeks pracy',
  30. '99.83.930.htm' => 'Kodeks karny skarbowy',
  31. '00.94.1037.htm' => 'Kodeks spółek handlowych',
  32. '00.98.1071.htm' => 'Kodeks postępowania administracyjnego',
  33. '01.106.1148.htm' => 'Kodeks postępowania w sprawach o wykroczenie',
  34. '01.138.1545.htm' => 'Kodeks morski');
  35.  
  36.  
  37. ?>
  38. <?echo '<?xml version="1.0" encoding="utf-8"?>
  39. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  40. <html xmlns="http://www.w3.org/1999/xhtml">
  41. <head>
  42. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  43. <title>Instalator</title>
  44. </head>
  45. <body xml:lang="pl">';
  46.  
  47. try
  48. {
  49. $pdo = new PDO('mysql:host=localhost;dbname='.$db, $user, $pass);
  50.  
  51. $pdo -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  52. $stmt = $pdo -> prepare( 'INSERT INTO `documents`( id, type, name, year, number, text ) VALUES( null, "Konstytucja i kodeksy", :name, :year, :number, :text ) ' );
  53. $stmt -> bindParam( ':name', $name, PDO::PARAM_STR );
  54. $stmt -> bindParam( ':year', $year, PDO::PARAM_STR );
  55. $stmt -> bindParam( ':number', $number, PDO::PARAM_INT );
  56. $stmt -> bindParam( ':text', $text );
  57. }
  58. catch( PDOException $error )
  59. {
  60. die ( 'Error: '. $error -> getMessage() );
  61. }
  62.  
  63. $number = 1;
  64. $year = 0;
  65. foreach( $addr_array as $postfix => $title )
  66. {
  67. $cr_tmp = curl_init( $base_addr . $postfix );
  68. curl_setopt( $cr_tmp, CURLOPT_RETURNTRANSFER, TRUE );
  69. $law = curl_exec( $cr_tmp );
  70. curl_close( $cr_tmp );
  71. $text = substr( $law, strpos( $law, '<table class="txs">') );
  72. preg_match( '%Dz.U.[0-9]+.[0-9]+.[0-9]+%', $text, $names );
  73. $name = $title .' - ' .$names[0];//iconv( "CP1250", "UTF-8", $title .' - ' .$names[0] );//mb_convert_encoding( $title .' - ' .$names[0], "UTF-8" );//
  74. $stmt -> execute();
  75. echo $title. '<br />';
  76. ++$number;
  77. }
  78.  
  79. echo '<a href="get_statutes.php">Dalej</a>';
  80. ?>
  81. </body>
  82. </html>
To jest plik, który pobiera dane. Poniżej wyświetlanie:
  1. <?php
  2. //session_start();
  3. require_once( '../inc/config.php' );
  4.  
  5. echo '<?xml version="1.0" encoding="utf-8"?>
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml">
  8. <head>
  9. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  10. <title>Instalator</title>
  11. </head>
  12. <body xml:lang="pl">';
  13.  function convert( $strString )
  14. {
  15. $win2utf = array(
  16. "xb9" => "xc4x85", "xa5" => "xc4x84",
  17. "xe6" => "xc4x87", "xc6" => "xc4x86",
  18. "xea" => "xc4x99", "xca" => "xc4x98",
  19. "xb3" => "xc5x82", "xa3" => "xc5x81",
  20. "xf3" => "xc3xb3", "xd3" => "xc3x93",
  21. "x9c" => "xc5x9b", "x8c" => "xc5x9a",
  22. "xbf" => "xc5xbc", "x8f" => "xc5xbb",
  23. "x9f" => "xc5xba", "xaf" => "xc5xb9",
  24. "xf1" => "xc5x84", "xd1" => "xc5x83"
  25. );
  26. return strtr( $strString, array_flip( $win2utf ) );
  27. }
  28. try
  29. {
  30. $pdo = new PDO('mysql:host=localhost;dbname='.$db, $user, $pass);
  31.  
  32. $pdo -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
  33. $stmt = $pdo -> prepare( 'SELECT * FROM documents' );
  34. $stmt -> execute();
  35. while( $row = $stmt -> fetch() )
  36. {
  37. echo convert($row['name']).'<br /><br/>';
  38. }
  39. }
  40. catch( PDOException $error )
  41. {
  42. die ( 'Error: '. $error -> getMessage() );
  43. }
  44. ?>
  45. </body>
  46. </html>
Efekt jest taki, że nadal mam krzaki. Próbowałem konwertować przed zapisem do bazy co byłoby dla mnie korzystniejsze, jednak efekt był taki sami. Próbowałem iconv, mbstring oraz zmiany takiej jak jest aktualnie w kodzie. NIC nie pomogło

pzdr.

Teraz jak korzystam z iconv to raz działa a raz nie ...

Jakieś pomysły gdzie mogę robić błąd ?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 06:06