Autor | Zpráva | ||
---|---|---|---|
leorond Profil |
Ahoj, rád bych věděl zda je možné nějak doplnit tuto funkci o charset
<?php function connect() { mssql_connect("IP", "user", "pass"); //pripojime k serveru mssql_select_db("databaze"); //vybereme databazi } ?> v mysql by to šlo takto mysql_set_charset("utf8"); ale co vím tak MSSQL tento zápis nepodporuje.
Zkoušel jsem dodat ini_set('mssql.charset', 'UTF-8'); , nastavit kódování v php.ini a prošel tisíce návodů na internetu ale nic mi nepomohlo, pokaždé se mi do DB zapíše například pokud zapisuji znaky do formuláře ěščřžýáíé, do DB se zapíše ?š???ýáíé, na webu se vypíše ?š???ýáíé.
Skript pro přidávání do DB ( je to jen testovací skript bez zabezpečení ) <?php if(isset($_POST["OK"])) { $text = $_POST["text"]; mssql_query("INSERT INTO rod_news (text,podpis,datum) VALUES ('".$text."','".$_SESSION["user"]."','".time()."')"); echo "Novinka byla přidána!"; } ?> <form action="#" method="post"> <textarea name="text"></textarea> <input type="submit" name="OK" value="Přidat novinku"> </form> Děkuji moc za pomoc |
||
xROAL Profil |
#2 · Zasláno: 28. 12. 2015, 02:39:56
Skús všetky reťazce (minimálne tie, ktoré obsahujú diakritiku) vkladať ako
N'string' , a uisti sa, že dátový typ stĺpcov je nchar alebo nvarchar .
V tvojom prípade by teda dotaz vyzeral: mssql_query("INSERT INTO rod_news (text,podpis,datum) VALUES (N'".$text."',N'".$_SESSION["user"]."','".time()."')"); Pokiaľ viem, rozšírenie mssql neumožňuje nejakým spôsobom riešiť kódovanie.
Ak náhodou robíš na Windowse a máš možnosť inštalovať softvér a zasahovať do konfigurácie PHP, použi radšej sqlsrv rozšírenie (myslím, že sa to dá dostať aj na Linux ale osobne som to viac neštudoval). |
||
Zechy Profil |
Největší problém je, že sama o sobě MSSQL UTF8 neumí.
Nejjednodušší je používat sloupce nvarchar a ntext a do nich ukládat tak, že před uvozovky se přidá N prefix - Databáze to sebere jako, že se jedná o unicode zápis a měla by tak zachovat kodování, např.: INSERT INTO (nvarchar_sloupec) VALUES(N'Hodnota'); Případně existuje ještě jedna cesta jak to obejít, ale to spíš, až když nezabere N prefix. EDIT: Koukám, že xROAL mě předběhl :D xROAL: „Pokiaľ viem, rozšírenie mssql neumožňuje nejakým spôsobom riešiť kódovanie.“
Jde spíš o to, že MS SQL databáze neumí UTF-8 vůbec. |
||
leorond Profil |
xROAL: Ano jedu na VPS ale nějak se v tom článku nevyznám
Pokud použiji N prefix tak dostanu do DB tento zápis 臎š膷艡啪ýáíé a z DB vylezou opět otazníky. Vyzkoušel jsem i metodu popsanou ZDE ale bezúspěšně, do DB se nic nezapíše. |
||
leorond Profil |
#5 · Zasláno: 28. 12. 2015, 12:43:47
Jo zase je to taková hloupost a to nastavení Collate.
Měl jsem nastaveno Czech_CI_AS a stačilo to změnit na Chinese_PRC a diakritika pomocí N prefix je 100%. Děkuji všem |
||
leorond Profil |
#6 · Zasláno: 28. 12. 2015, 19:13:53
No tak ve finále jsem nastavil Collate na Chinese_PRC a když to vezmu kolem a kolem tak i bez N prefixu by to mělo spolehlivě fungovat.
A hádejte co, ono to funguje :D |
||
Časová prodleva: 9 let
|
0