![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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 |
|
|
![]()
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ć.
|
|
|
![]()
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?
|
|
|
![]()
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 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 207 Pomógł: 40 Dołączył: 2.06.2016 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj:
albo po utworzeniu klasy połączenia PDO
|
|
|
![]()
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. |
|
|
![]()
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. |
|
|
![]()
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')
|
|
|
![]()
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 |
|
|
![]()
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?
|
|
|
![]()
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>'; |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 616 Pomógł: 84 Dołączył: 29.11.2006 Skąd: bełchatów Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 19:44 |