PDA

Zobacz pełną wersję : Problem z kodowaniem w nowo stworzonym komponencie



mich32
12-08-2008, 15:43
Witam,

Wiem, że o kodowaniu jest dużo wątków, ale nie znalazłem nic co mi pomogło. Mój problem wygląda następująco: mam stronę w joomli w kodowaniu utf8, baza danych jest w nazwa.pl na bazie mysql4 i kodowanie bazy danych wygląda tak:

Metoda porównywania napisów: latin2_general_ci
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_unicode_ci

I wszystkie znaki wyświetlają się bezproblemowo i na stronie i w phpMyAdminie.

Teraz potrzebują stworzyć druga bazę danych nie kolidującą z bazą joomli. Więc stworzyłem sobie na nazwa.pl nową bazę tym razem mysql5 bo nie można już wybrać mysql4. Kodowanie stworzyłem identycznie jak w joomli:

Metoda porównywania napisów: latin2_general_ci
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_unicode_ci

(oprócz tego próbowałem stworzyć jeszcze jedną bazę tym razem wszystko w kodowaniu utf8_general_ci ).

Problem jest taki że jak dodaję sobie przykładowe dane do tych dwóch testowych baz przez phpMyAdmina, to w phpMyAdminie wyświetlają się poprawnie polskie znaczki. A jeżeli próbuję je wyświetlić na stronie to już wyświetlają się krzaczki. Jeszcze chciałem dodać, że dane wyświetlam w komponenencie który sobie stworzyłem specjalnie do testowania wyświetlania poprawności danych. Kod w tym komponenecie wygląda tak:


defined( '_VALID_MOS' ) or die( 'Restricted access' );
echo 'Mój komponent';

DEFINE ('DB_USER', 'test');
DEFINE ('DB_PASSWORD', 'test123');
DEFINE ('DB_HOST', 'sql.stronka.pl');
DEFINE ('DB_NAME', 'test');

//@mysql_query("SET NAMES 'latin2'", $this->_resource);
//@mysql_query("SET NAMES 'utf-8'");

$dbc = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR die ('Nie mogłem się połączyć: ' . mysql_error() );
@mysql_select_db (DB_NAME) OR die ('Nie mogłem wybrać bazy danych: ' . mysql_error() );


$zapytanie = mysql_query ("SELECT * FROM test");
while ($w = mysql_fetch_row($zapytanie)) {
echo ' '.$w[0].', '.$w[1].', '.$w[4].', '.$w[5].'

';
}

mysql_close ($dbc);

?>Jeszcze chciałem dodać, że dodając ręcznie dane na stronie w taki sposób:


mysql_query("INSERT INTO test (one ,two) VALUES ($zm , 'ąźćśźńó') ") or die('Error, insert query failed');To dane na stronie się wyświetlają się poprawnie, ale w wyświetlając je w phpMyAdminie są krzaczki, czyli odwrotna sytuacja. Próbowałem użyć też takich funkcji:

@mysql_query("SET NAMES 'latin2'", $this->_resource);
@mysql_query("SET NAMES 'utf-8'");ale też nie pomogło. Czy ktoś wie w czym leży problem ?? Z góry dziękuję za pomoc.

zwiastun
12-08-2008, 16:14
A czym masz problem? W obsłudze phpMyAdmina na nazwa.pl czy w kodowaniu joomla? Bo to drugie - jak piszesz - jest w porządku. A to pierwsze to chyba nie to forum

mich32
12-08-2008, 19:00
Witam, problem jest z kodowaniem znaków nie z phpMyAdminem, tylko napisałem o tym że dodaje dane przez phpMyAdmina, bo to może ma jakieś znaczenie. Jak już pisałem wcześniej, problem jest jeżeli stworzę sobie nową bazę, bo na starej na której jest joomla przy dodawaniu danych przez phpMyAdmina dane się wyświetlają z polskimi znakami. A na nowej już są problemy, wszystko opisałem w moim wątku.

zwiastun
13-08-2008, 02:37
Problem jest taki że jak dodaję sobie przykładowe dane do tych dwóch testowych baz przez phpMyAdmina, to w phpMyAdminie wyświetlają się poprawnie polskie znaczki. A jeżeli próbuję je wyświetlić na stronie to już wyświetlają się krzaczki.
Problemu nie masz z Joomla! tylko z phpMyAdminem. To w phpMyAdminie wprowadzasz dane, a nie w Joomla.

mich32
13-08-2008, 09:10
Jak już zaznaczyłem wcześniej to dodawałem też dane ręcznie na stronie do nowo stworzonych tabel:


mysql_query("INSERT INTO test (one ,two) VALUES ($zm , 'ąźćśźńó') ") or die('Error, insert query failed');

I wtedy dane tak wstawione wyświetlają się dobrze na stronie, ale wyświetlając je przez phpMyAdmina są krzaczki. To by mogło wskazywac na problemy z phpMyAdminem. Ale najlepsze jest to, że dane wstawiane z joomli do tabel "joomlowskich" wyświetlają się dobrze i na stronie i w phpMyAdminie, ale już wstawiane do nowej bazy danych stworzonej przeze mnie już się źle wyświetlają. Czyli jednak jakby to nie była wina phpMyAdmina. (Zwiastun dziękuję za zainteresowanie tematem).

hsm
04-09-2008, 02:30
Przerobiłem trochę skrypt cometa do integracji z nokautem tak żeby działał pod nowym VM ale mam problem z kodowaniem znaków próbowałem zrobić tak jak tu opisałeś lecz coś jest nie tak. W pliku xml zamiast ą,ę mam ?.

Będę wdzięczny za pomoc.

$polaczenie=mysql_connect($host,$user,$password); /* Nawi-zanie po--czenia z baz- */
mysql_select_db($db,$polaczenie); /* Wybranie odpowiedniej bazy danych */

$sql = "SELECT DISTINCT p.product_id, p.product_name, p.product_s_desc, p.product_full_image, pp.product_price, cat.category_id, catx.category_parent_id
FROM jos_vm_product p, jos_vm_product_price pp, jos_vm_category cat, jos_vm_product_category_xref pcx, jos_vm_category_xref catx
WHERE cat.category_id = pcx.category_id
AND pcx.category_id = catx.category_parent_id
AND p.product_id = pp.product_id
AND p.product_publish = 'Y'
AND pcx.product_id = p.product_id
ORDER BY p.product_id DESC ";
$pyt=iconv("UTF-8","ISO-8859-2",$sql);
$wykonaj = mysql_query($pyt);



$file = "nokaut.xml";
$fp = fopen($file, "w");

$naglowek='<?xml version="1.0" encoding="ISO-8859-2"?>
<!DOCTYPE pasaz:envelope SYSTEM "loadOffers.dtd">
<pasaz Envelope xmlns:pasaz="http://schemas.xmlsoap.org/soap/envelope>
<pasaz:Body>
<loadOffers xmlns="urn:ExportB2B">
<offers>';
fwrite($fp, $naglowek);
fclose($fp);
$licznik=1;
while($wiersz = mysql_fetch_array($wykonaj))
{
$fp = fopen($file, "a");
//$kategoria=$wiersz['category_id'];


$cena = round($wiersz['product_price'] * 1.22,2);

$dane='
<offer>
<id>'.$wiersz['product_id'].'</id>
<name>'.$wiersz['product_name'].'</name>
<description>'.$wiersz['product_s_desc'].'</description>
<url>http://domena.pl/component/page,shop.product_details/flypage,shop.flypage/product_id,'.$wiersz['product_id'].'/category_id,'.$kategoria['category_id'].'/option,com_virtuemart/Itemid,26/</url>
<image>domena.pl/components/com_virtuemart/shop_image/product/'.$wiersz['product_full_image'].'</image>
<price>'.$cena.'</price>
<category>'.$kategoria.'</category>
</offer>';
fwrite($fp, $dane);
fclose($fp);
$dane='';
}

$koniec='
</offers>
</loadOffers>
</pasaz:bodu>
</pasaz:Envelope>';

$fp = fopen($file, "a");
fwrite($fp, $koniec);
fclose($fp);

?>