Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP MSSQL, Textarea
emiterani
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.10.2016

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


Witam. Mam problem prawidłowo wyświetlanym tekstem w polu textarea.
Konfiguracja:
1. www - apache na linuxie
2. php 5.6 na linuxie
3. baza MSSQL 2008 na windowsie
Opis problemu:
Poprzez skrypt dokonuj ę zapisu do bazy (MSSQL) danych min. z textarea. Tekst przekodowywany jest na CP1250 poprzez iconv. W bazie tekst widoczy jest poprawnie, natmiast po pobraniu z bazy i ponownym wyświetleniu w polu textarea już nie jest poprawny. Kombinowałem z przekodowaniem poprzez iconv ale to nic nie daje, tym bardziej że testowy tekst jest bez polskich liter. Tekst w innych tagach html wyświetla się prawidłowo, natomiast w textarea:
t?e?s?t?
coś takiego jest, znaki zapytania na czarnym tle. Myślałem że to problem z kodowaniem znaków ale to nie to. Czy ktoś spotkał się z podobnym problemem i rozwiązał go?

Adam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
emstawicki
post
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


Czy musisz używać kodowania cp-1250?
Jeżeli nie to przerób wszystko na utf-8 i trzymaj się jednego standardu kodowania wszędzie (http://phpcoding.rf.gd/2016/07/01/characte...eful-practices/)

Ten post edytował emstawicki 13.10.2016, 11:03:16
Go to the top of the page
+Quote Post
emiterani
post
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.10.2016

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


No niestety muszę, ponieważ baza wcześniej byla stworzona i używana jest przez asp, ja próbuję aplikację na php przepisać.
Go to the top of the page
+Quote Post
emstawicki
post
Post #4





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


Czy podczas połączenia z bazą danych ustawiasz SET NAMES?
Go to the top of the page
+Quote Post
emiterani
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.10.2016

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


do połączenia z mssql korzystam z:
$pdo=new \PDO ("dblib:host=$this->serverName:$this->serverPort;dbname:$this->dbName","$this->dbUser","$this->dbPass");
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
Szukałem jakieś zminnej ustawienia SET NAME ale nie widzę. Możesz mnie naprowadzić czego mam szukać, gdzie co ustawić. W innym sterowniku jest CHARSET ale w tym takiej opcji nie widzę.

Ten post edytował emiterani 13.10.2016, 11:36:49
Go to the top of the page
+Quote Post
emstawicki
post
Post #6





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


Spróbuj:
  1. $pdo=new \PDO ("dblib:host=$this->serverName:$this->serverPort;dbname:$this->dbName,charset=KODOWANIE_BAZY","$this->dbUser","$this->dbPass");

albo po utworzeniu klasy połączenia PDO
  1. $pdo->exec("set names KODOWANIE_BAZY");
Go to the top of the page
+Quote Post
emiterani
post
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.10.2016

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


Niestety w pierwszym i drugim przypadku bład 500:
1. PDO::__construct() expects parameter 4 to be array, string given in
2. PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 195 General SQL Server error: Check messages from the SQL Server [195] (severity 15) []' in /var/www/html/kc-viewer/App/DB/db.class.php:32\nStack trace:\n#0 /var/www/html/kc-viewer/App/DB/db.class.php(32): PDO->exec('set names CP125...')\n#1

Tylko wydaje mi się że to nie jest problem kodowania, bo np w input wyświetla prawidłowo tę samą treść, coś musi być nie tak z textarea.
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


https://msdn.microsoft.com/en-us/library/ff...v=sql.105).aspx
kieruje do https://msdn.microsoft.com/en-us/library/ff...v=sql.105).aspx
PDO::SQLSRV_ATTR_ENCODING: Sets the character set encoding used by the driver to communicate with the server.
Go to the top of the page
+Quote Post
emstawicki
post
Post #9





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


1. zamiast przecinka średnik do oddzielania argumentów i to jest nadal jeden parametr.
2. Podałeś takie kodowanie jakie masz zdefiniowane na serwerze bazy danych?
MSSQ sprawdź:
Kod
SELECT SERVERPROPERTY('Collation')
Go to the top of the page
+Quote Post
emiterani
post
Post #10





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.10.2016

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


$pdo=new \PDO ("dblib:host=$this->serverName:$this->serverPort;dbname:$this->dbName,charset:CP1250","$this->dbUser","$this->dbPass");
Nie ma 500 ale nic to nie zmieniło, ani cp1250 ani utf-8, dalej bez zmiany.

Polish_CI_AS
Taki ustawiłem ale dalej to samo.

Ten post edytował emiterani 13.10.2016, 12:23:54
Go to the top of the page
+Quote Post
emstawicki
post
Post #11





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


To teraz przejdźmy do tego jak wyświetlasz to i jakie nagłówki na temat zestawu znaków wysyłają pliki html?
Go to the top of the page
+Quote Post
emiterani
post
Post #12





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.10.2016

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


Content-Type text/html; charset=UTF-8
a wyświetlam poprzez print i dalej leci do jquery gdzie następuje załadowanie do div-a
$.ajax({
url:'App/BaseScans/detailScan.php',
type:'POST',
data:{'call':call,'id':id},
success:function(rew){
$("#details").append(rew);
}
});

php
$tmp[0]['Opis'] - pobrany z bazy.
print '<textarea id=opis wrap=physical >'.$tmp[0]['Opis'].'</textarea>';
Go to the top of the page
+Quote Post
memory
post
Post #13





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


charset działa od TDS 7.0

  1. /etc/freetds/freetds.conf


tam ustawić tds version = 7.0 oraz client charset =

mssql na linuxie powoduje sporo błędów

Ten post edytował memory 13.10.2016, 13:15:36
Go to the top of the page
+Quote Post
emiterani
post
Post #14





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 13.10.2016

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


ustawione, bez zmiany.
Nie wiem czy to jest ważne ale zrobiłem taki test, wczytałem do texarea wartość z innej kolumny, i wyświetlił się prawidłowo. To Mnie zastanowiło i sprawdziłem jakiego rodzaju pole jest to które wczytuję do textarea. Okazuje sie że jest to nvarchar(MAX) i tu jest chyba problem. Aby to odczytać muszę stosować CONVERT(binary(MAX) Opis as Opis). Może to pomoże rozwiązać problem.

Dobra problem rozwiązany, tak jak przypuszczałem problemem jest pole typu nvarchar(MAX), po zmianie na nvarchar(2000) wszystko działa jak należy.
Dziękuję za poświecony czas.

Ten post edytował emiterani 13.10.2016, 16:34:28
Go to the top of the page
+Quote Post

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: 22.08.2025 - 19:44