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:
<?php
$name = iconv( "CP1250", "UTF-8", $title .' - ' .$names[0] );//mb_convert_encoding( $title .' - ' .$names[0], "UTF-8" );//
?>
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:
<?php
//session_start();
require_once( '../inc/config.php' );
function convert( $strString )
{
"xb9" => "xc4x85", "xa5" => "xc4x84",
"xe6" => "xc4x87", "xc6" => "xc4x86",
"xea" => "xc4x99", "xca" => "xc4x98",
"xb3" => "xc5x82", "xa3" => "xc5x81",
"xf3" => "xc3xb3", "xd3" => "xc3x93",
"x9c" => "xc5x9b", "x8c" => "xc5x9a",
"xbf" => "xc5xbc", "x8f" => "xc5xbb",
"x9f" => "xc5xba", "xaf" => "xc5xb9",
"xf1" => "xc5x84", "xd1" => "xc5x83"
);
}
$base_addr = 'http://bap-psp.lex.pl/serwis/kodeksy/akty/';
$addr_array = array( '64.9.59.htm' => 'Kodeks rodzinny i opiekuńczy', '64.16.93.htm' => 'Kodeks cywilny',
'64.43.296.htm' => 'Kodeks postępowania cywilnego',
'71.12.114.htm' => 'Kodeks wykroczeń',
'97.78.483.htm' => 'Konstytucja RP',
'97.88.553.htm' => 'Kodeks karny',
'97.89.555.htm' => 'Kodeks postępowania karnego',
'97.90.557.htm' => 'Kodeks karny wykonawczy',
'98.21.94.htm' => 'Kodeks pracy',
'99.83.930.htm' => 'Kodeks karny skarbowy',
'00.94.1037.htm' => 'Kodeks spółek handlowych',
'00.98.1071.htm' => 'Kodeks postępowania administracyjnego',
'01.106.1148.htm' => 'Kodeks postępowania w sprawach o wykroczenie',
'01.138.1545.htm' => 'Kodeks morski');
?>
<?echo '<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Instalator</title>
</head>
<body xml:lang="pl">';
try
{
$pdo = new PDO('mysql:host=localhost;dbname='.$db, $user, $pass);
$pdo -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $pdo -> prepare( 'INSERT INTO `documents`( id, type, name, year, number, text ) VALUES( null, "Konstytucja i kodeksy", :name, :year, :number, :text ) ' );
$stmt -> bindParam( ':name', $name, PDO::PARAM_STR );
$stmt -> bindParam( ':year', $year, PDO::PARAM_STR );
$stmt -> bindParam( ':number', $number, PDO::PARAM_INT );
$stmt -> bindParam( ':text', $text );
}
catch( PDOException $error )
{
die ( 'Error: '. $error -> getMessage
() ); }
$number = 1;
$year = 0;
foreach( $addr_array as $postfix => $title )
{
$cr_tmp = curl_init( $base_addr . $postfix );
curl_setopt( $cr_tmp, CURLOPT_RETURNTRANSFER, TRUE );
$law = curl_exec( $cr_tmp );
curl_close( $cr_tmp );
$text = substr( $law, strpos( $law, '<table class="txs">') ); preg_match( '%Dz.U.[0-9]+.[0-9]+.[0-9]+%', $text, $names ); $name = $title .' - ' .$names[0];//iconv( "CP1250", "UTF-8", $title .' - ' .$names[0] );//mb_convert_encoding( $title .' - ' .$names[0], "UTF-8" );//
$stmt -> execute();
++$number;
}
echo '<a href="get_statutes.php">Dalej</a>'; ?>
</body>
</html>
To jest plik, który pobiera dane. Poniżej wyświetlanie:
<?php
//session_start();
require_once( '../inc/config.php' );
echo '<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Instalator</title>
</head>
<body xml:lang="pl">';
function convert( $strString )
{
"xb9" => "xc4x85", "xa5" => "xc4x84",
"xe6" => "xc4x87", "xc6" => "xc4x86",
"xea" => "xc4x99", "xca" => "xc4x98",
"xb3" => "xc5x82", "xa3" => "xc5x81",
"xf3" => "xc3xb3", "xd3" => "xc3x93",
"x9c" => "xc5x9b", "x8c" => "xc5x9a",
"xbf" => "xc5xbc", "x8f" => "xc5xbb",
"x9f" => "xc5xba", "xaf" => "xc5xb9",
"xf1" => "xc5x84", "xd1" => "xc5x83"
);
}
try
{
$pdo = new PDO('mysql:host=localhost;dbname='.$db, $user, $pass);
$pdo -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $pdo -> prepare( 'SELECT * FROM documents' );
$stmt -> execute();
while( $row = $stmt -> fetch() )
{
echo convert
($row['name']).'<br /><br/>'; }
}
catch( PDOException $error )
{
die ( 'Error: '. $error -> getMessage
() ); }
?>
</body>
</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 ?