Skocz do zawartości

PHP Nuke i polskie znaki....


topbi

Rekomendowane odpowiedzi

Pomoc specjalisty mile widziana ;)

Zainstalowałem PHP Nuke v7.8 na czystej bazie w home.pl i...

juz kilka dni straciłem na zgłębienie tematu odpowiedniej konfiguracji polskich literek.

Efekt jest bardzo ciekawy, wpisuje poprzez nuka tytuł strony zawierający "ąż", zapisuje i otrzymuje na stronie "±¿" a bazie widze "±¿". Więc próbuję z drugiej strony wpisuję w bazie (poprzez phpMyAdmin) "ąż" i wtedy na stronie wszystko wygląda ok.

Sumując, strona wygląda dobrze ale wpisywanie contentu bezpośrednio do bazy nie bardzo mi się widzi....

W phpNuke język strony ustawiony jest na polski, w kodzie html widze cały czas 'charset=ISO-8859-2'.

Ustawienia defaultowe bazy:

character_set_client		utf8
character_set_connection	utf8
character_set_database	latin2
character_set_result		utf8
character_set_server		latin2
character_set_system		utf8
collation_connection		utf8_general_ci
collation_database		latin2_general_ci
collation_server		latin2_general_ci

ustawienia które widze na głownej stronie phpMyAdmin

Language: Polski - Polish (iso-8859-2)
System kodowania znaków dla MySQL: Iso 8859-2 Central European (latin2)
System porównań: latin2_genetal_ci

Zmodyfikowałem pliki includes/sql_layer.php oraz db/mysql.php wg. https://phpnuke.org.pl/faq-634.html niestety nie pomogło.

Odnośnik do komentarza
Udostępnij na innych stronach

Zapoznaj sie z __tym postem__

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Tak też zrobiłem zgodnie z instrukcją (https://phpnuke.org.pl/faq-634.html) ale efekt jest żaden :D

db/mysql.php

function sql_db($sqlserver, $sqluser, $sqlpassword, $database, $persistency = true)
{

	$this->persistency = $persistency;
	$this->user = $sqluser;
	$this->password = $sqlpassword;
	$this->server = $sqlserver;
	$this->dbname = $database;

	if($this->persistency)
	{
		$this->db_connect_id = @mysql_pconnect($this->server, $this->user, $this->password);
	}
	else
	{
		$this->db_connect_id = @mysql_connect($this->server, $this->user, $this->password);
	}
	if($this->db_connect_id)
	{
		if($database != "")
		{
			$this->dbname = $database;
			$dbselect = @mysql_select_db($this->dbname);
			mysql_query("set names 'latin2'",$this->db_connect_id);

includes/sql_layer.php

function sql_connect($host, $user, $password, $db)
{
global $dbtype;
switch ($dbtype) {

case "MySQL":
	$dbi=@mysql_connect($host, $user, $password);
mysql_select_db($db);
mysql_query("set names 'latin2'",$dbi);

Odnośnik do komentarza
Udostępnij na innych stronach

mysql_query("set names 'latin2'",$this->db_connect_id);

mysql_query("set names 'latin2'",$dbi);

sprawdz z ustawieniami latin1 czyli zmień to w tych plikach odpowidajacych za łączenie z bazą

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Po zmianie na latin1:

- wpisuje z nuka "ąż" i na stronie mam "±¿", w kodzie html: "±¿" a w bazie widzę też "±¿"

- po wpisaniu z ręki do bazy "ąż": na stronie "??" w kodzie to samo

Po zmianie na utf8:

- wpisuje z nuka "ąż" i na stronie "±¿", w kodzie "±¿" a w bazie "±¿"

- po wpisaniu z ręki do bazy "ąż": na stronie "ÄĹź" w kodzie "Ä…ĹĽ" w bazie

Po usunięciu lini:

mysql_query("set names 'latin2'",$this->db_connect_id);
mysql_query("set names 'latin2'",$dbi);

- wpisuje z nuka "ąż" i na stronie mam "±¿", w kodzie html: "±¿" a w bazie widzę też "±¿"

- po wpisaniu z eki "ąż" na stronie wygląda wszystko ok

Z moich obserwacji wynika, że skrypt czyta z bazy poprawnie, tylko przy zapisie coś nie tak konwertuje.

Odnośnik do komentarza
Udostępnij na innych stronach

Ja nie napotkałem żadnych problemów :pytajnik:

Specjalnie dla ciebie utworzyłem nową bazę defaultowo ustawioną:

Metoda porównywania napisów: latin2_general_ci

Baza /tabela

-
- Struktura tabeli dla  `test`
CREATE TABLE `test` (
 `id` tinyint(4) NOT NULL auto_increment,
 `wyraz` varchar(255) NOT NULL default '',
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2;
-- Zrzut danych tabeli `test`

INSERT INTO `test` VALUES (1, 'test 2 śćńęążźł');
INSERT INTO `test` VALUES (2, 'śćńęążźł');

Strona testowa:

<?//test_sql.php
$host='localhost';
$user='xxx';
$haslo='xxx';
$baza='xxx';
$nazwa_tabeli='test';
$conn = @mysql_connect($host,$user,$haslo) or die (mysql_error());
$result = mysql_select_db($baza, $conn)or die (mysql_error());

if($_POST[akcja]=='dodaj')
{
mysql_query("INSERT INTO $nazwa_tabeli SET wyraz='$_POST[slowo]'") or die (mysql_error());
if(mysql_affected_rows()>O) echo"Rekord dodano"; else echo"Rekord nie dodano";
}
$zapytanie=mysql_query("SELECT * FROM $nazwa_tabeli");
while($rekord=mysql_fetch_object($zapytanie))
{
echo $rekord->wyraz.'<br />';
}
?>

<head><title>Test SQL__</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2" /> 
</head><body>
<form method="POST">
<input type="hidden" name="akcja" value="dodaj" />
<p><input type="text" name="slowo" size="33"><input type="submit" value="Dodaj" /></p>
</form>
</body></html>

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Strona przygotowana przez Ciebie działa dobrze. Wydaje mi się że to coś ze skryptem PHPNuke.

Pobierałem stąd https://phpnuke.org/modules.php?name=Downlo...wdownload&cid=1

Wydaje mi się że przy zapisywaniu robi jakąś dziwną konwersje, przy czytaniu wszystko jest ok.

:D Miałbyś czas aby w to spojrzeć?

Odnośnik do komentarza
Udostępnij na innych stronach

:) Miałbyś czas aby w to spojrzeć?

A jaki masz charset ustawiony dla strony?

1) w tym moim kodzie zamień tak aby zapisywał w jednej z kolumn nuke i potem odczytaj z poziomu nuke

2) w tym moim kodzie zamień tak aby odczytywał dane zapisane przez nuke z tabeli nuke

I zobaczymy co słychać

Lub wyślij mi na PM dane do logowania na konto i bazę sam zobaczę co jest nie tak. Nie chcę mi się specjalnie instalować do tego celu nuke :D

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

No i jak tam, dałeś radę, uzyskałeś w końcu te polskie znaki? :jezyk1:

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności