UTF8, eller hur hanterar jag detta?

PHPportalen Forum Index » HTML/CSS/JavaScript/Design
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
marcusgarden



Medlem i: 3072 dagar

Status: Offline



#742343
Inlägg Skrivet: 2018-10-23 20:59      Ämne: UTF8, eller hur hanterar jag detta? Citera

När jag kör en textsträng i PHP så blir det t.ex.

Fika6;12.2;18.26;Största jävla
chokelabollen med strössel på!;Galna
Kärringar i snöret;JA;25;24;g;48;24;5;3

Men när jag kör samma sträng genom ett javascript så bryts strängen och det ser ut så här

Fika6;12.2;18.26;Ststa jvla chokelabollen med strsel p;Galna Krringar i snet;JA;25;2

Hur gör jag då?
Måste jag hantera strängen med UTF8 eller annat för att få en korrekt sträng i javascript?

Tack på förhand!
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
webbhelp



Medlem i: 4290 dagar
Från: Sverige
Status: Offline



#742344
Inlägg Skrivet: 2018-10-23 21:41      Ämne: Citera

Se till att alla filer har samma encoding. Helst utf8.
Samt meta charset är utf8 på sidan.

Om du inte kan ändra det så kan du ju testa att utf8_encode() eller utf8_decode() strängen innan den når javascriptet.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Skicka e-post Besök användarens hemsida MSN Messenger
marcusgarden



Medlem i: 3072 dagar

Status: Offline



#742345
Inlägg Skrivet: 2018-10-23 22:11      Ämne: Citera

Meta charset utf-8, check!
Filer har encoding utf8, check!
Testat alla varianter och kombinationer av detta:/
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4533 dagar
Från: Tavesta
Status: Offline



#742346
Inlägg Skrivet: 2018-10-24 01:15      Ämne: Citera

Sparar din kodeditor php-koden i utf-8-format?

Ett enkelt test:
PHP:
1:
 var_dump('ö'); 

skall ge string(2) "ö" ifall det är utf-8.
Annars brukar det bli string(1) "�"

Kommer datat från databas? Är i såfall anslutningen till databasen inställd på att använda utf-8 i kommunikationen med databasen?

När du skall föra över data från php till javascript är json_encode() bra att använda. Då skall teckenkodningen alltid bli rätt (förutsatt att du använder utf-8) och du kan även föra över fler dataformat än bara strängar. Dessutom riskerar du inte att korrumpera javascriptkoden ifall din sträng skulle innehålla citattecken, apostrofer eller något annat som kan ställa till det.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marcusgarden



Medlem i: 3072 dagar

Status: Offline



#742348
Inlägg Skrivet: 2018-10-24 09:49      Ämne: Citera

Ger string(2) "ö".
Collation utf8_general_ci
ska kolla på json_encode.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4533 dagar
Från: Tavesta
Status: Offline



#742349
Inlägg Skrivet: 2018-10-24 11:24      Ämne: Citera

marcusgarden skrev:
Collation utf8_general_ci

Den inställningen orsakar normalt inga teckenkodningsfel. Men det är i alla fall bra att använda utf-8 där, så åtminstone en större del av unicode fungerar.

Det som däremot orsakar teckenkodningsfel är om man i kommunikationen mellan php och databas använder något annat än utf-8. Därför bör man ange teckenkodning i samband med att man upprättar databasanslutningen. Du kan se i kommentarerna hur du kan göra det med PDO:
https://secure.php.net/manual/en/pdo.construct.php
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marcusgarden



Medlem i: 3072 dagar

Status: Offline



#742350
Inlägg Skrivet: 2018-10-24 12:09      Ämne: Citera

Ok, jag har kört samma sida i snart 10 år, har använt allt möjligt inom javascript och PHP.

Jag är ingen mästerkodare utan klipper, klistrar och lånar kodsnuttar och lär mig eftersom:)

Detta är en kodsnutt som jag har lånat och modifierat, det hämtar input från ett formulär och stoppar in varje entry i localstorage.

KOD:
1:
//öka på dessa för att lägga till fler var
2:
function Todo(id, dbid, description, category, categoryid, tax, tax_rate, amount, unit, unitid, lager, task, name, inprice, outprice, who, dueDate, r_id, n_id) {
3:
    //, dbid, description, category, tax, tax_rate, amount, unit, lager
4:
   this.id = id;
5:
   this.dbid = dbid;
6:
   this.description = description;
7:
   this.category = category;
8:
   this.categoryid = categoryid;
9:
   this.tax = tax;
10:
   this.tax_rate = tax_rate;
11:
   this.amount = amount;
12:
   this.unit = unit;
13:
   this.unitid = unitid;
14:
   this.lager = lager;
15:
    this.task = task;
16:
   this.name = name;
17:
   this.inprice = inprice;
18:
   this.outprice = outprice;
19:
   this.who = who;
20:
    this.dueDate = dueDate;
21:
   this.r_id = r_id;
22:
   this.n_id = n_id;
23:
    this.done = false;
24:
}
25:
 
26:
var todos = new Array();
27:
 
28:
window.onload = init;
29:
 
30:
function init() {
31:
    var submitButton = document.getElementById("submit");
32:
    submitButton.onclick = getFormData;
33:
   
34:
   getTodoItems();
35:
}
36:
 
37:
function getTodoItems() {
38:
    if (localStorage) {
39:
        for (var i = 0; i < localStorage.length; i++) {
40:
            var key = localStorage.key(i);
41:
            if (key.substring(0, 4) == "todo") {
42:
                var item = localStorage.getItem(key);
43:
                var todoItem = JSON.parse(item);
44:
                todos.push(todoItem);
45:
           }
46:
        }
47:
        addTodosToPage();
48:
    }
49:
    else {
50:
        console.log("Error: you don't have localStorage!");
51:
    }
52:
}
53:
 
54:
function addTodosToPage() {
55:
    var ul = document.getElementById("todoList");
56:
    var listFragment = document.createDocumentFragment();
57:
    for (var i = 0; i < todos.length; i++) {
58:
        var todoItem = todos[i];
59:
        var li = createNewTodo(todoItem);
60:
        listFragment.appendChild(li);
61:
    }
62:
    ul.appendChild(listFragment);
63:
}
64:
function addTodoToPage(todoItem) {
65:
    var ul = document.getElementById("todoList");
66:
    var li = createNewTodo(todoItem);
67:
    ul.appendChild(li);
68:
    document.forms[0].reset();
69:
}
70:
 
71:
function createNewTodo(todoItem) {
72:
    var li = document.createElement("li");
73:
   li.setAttribute("id", todoItem.id);
74:
   
75:
   //öka på dessa för att lägga till fler var
76:
    var spanTodo = document.createElement("span");
77:
   //todoItem.task + " + " +
78:
   total = todoItem.outprice-todoItem.inprice;
79:
    spanTodo.innerHTML =
80:
        todoItem.name + " (db-ID: " + todoItem.dbid + ") såldes av " + todoItem.who + " (r-ID: " + todoItem.r_id + "; r-ID: " + todoItem.n_id + ")<br />Tid och datum " + todoItem.dueDate + "<br />För " + todoItem.outprice + "kr (inköpspris: " + todoItem.inprice + "kr, förtjänst: " + total + "kr)<br />Beskrivning: " + todoItem.description + "<br />Kategori-ID: " + todoItem.categoryid + "<br />Kategori: " + todoItem.category + "<br />Moms: " + todoItem.tax + ", momssats " + todoItem.tax_rate + "%<br />Antal i förpackning " + todoItem.amount + todoItem.unit + "<br />Antal i lager " + todoItem.lager + todoItem.unit + " (enhets-ID " + todoItem.unitid + ")";
81:
 
82:
    var spanDone = document.createElement("span");
83:
    if (!todoItem.done) {
84:
        spanDone.setAttribute("class", "notDone");
85:
        spanDone.innerHTML = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
86:
    }
87:
    else {
88:
        spanDone.setAttribute("class", "done");
89:
        spanDone.innerHTML = "&nbsp;✔&nbsp;";
90:
    }
91:
   
92:
   var spanDelete = document.createElement("span");
93:
    spanDelete.setAttribute("class", "delete");
94:
    spanDelete.innerHTML = "&nbsp;✗&nbsp;";
95:
 
96:
    spanDelete.onclick = deleteItem;
97:
 
98:
    li.appendChild(spanDone);
99:
    li.appendChild(spanTodo);
100:
   li.appendChild(spanDelete);
101:
   
102:
    return li;
103:
}
104:
             
105:
function getFormData() {
106:
    var task = document.getElementById("task").value;
107:
    if (checkInputText(task, "Please enter a task")) return;
108:
   
109:
   //öka på dessa för att lägga till fler var
110:
   var fields = task.split(';');
111:
   var name = fields[0];
112:
   var inprice = fields[1];
113:
   var outprice = fields[2];
114:
   var description = fields[3];
115:
   var category = fields[4];
116:
   var tax = fields[5];
117:
   var tax_rate = fields[6];
118:
   var amount = fields[7];
119:
   var unit = fields[8];
120:
   var lager = fields[9];
121:
   var dbid = fields[10];
122:
   var categoryid = fields[11];
123:
   var unitid = fields[12];
124:
   //var r_id = fields[3];
125:
   
126:
   //var lager = document.getElementById("lager").value;
127:
    if (checkInputText(lager, "Please enter a lager")) return;
128:
   
129:
   //var unit = document.getElementById("unit").value;
130:
    if (checkInputText(unit, "Please enter a unit")) return;
131:
   
132:
   //var unitid = document.getElementById("unitid").value;
133:
    if (checkInputText(unitid, "Please enter a unitid")) return;
134:
   
135:
   //var amount = document.getElementById("amount").value;
136:
    if (checkInputText(amount, "Please enter a amount")) return;
137:
   
138:
   //var tax_rate = document.getElementById("tax_rate").value;
139:
    if (checkInputText(tax_rate, "Please enter a tax_rate")) return;
140:
   
141:
   //var tax = document.getElementById("tax").value;
142:
    if (checkInputText(tax, "Please enter a tax")) return;
143:
   
144:
   //var category = document.getElementById("category").value;
145:
    if (checkInputText(category, "Please enter a category")) return;
146:
   
147:
   //var categoryid = document.getElementById("categoryid").value;
148:
    if (checkInputText(categoryid, "Please enter a categoryid")) return;
149:
   
150:
   //var description = document.getElementById("description").value;
151:
    if (checkInputText(description, "Please enter a description")) return;
152:
   
153:
   //var dbid = document.getElementById("dbid").value;
154:
    if (checkInputText(dbid, "Please enter a dbid")) return;
155:
 
156:
    var who = document.getElementById("who").value;
157:
    if (checkInputText(who, "Please enter a person to do the task")) return;
158:
 
159:
    var date = document.getElementById("dueDate").value;
160:
    if (checkInputText(date, "Please enter a due date")) return;
161:
   
162:
   var r_id = document.getElementById("r_id").value;
163:
    if (checkInputText(r_id, "Please enter a r_id")) return;
164:
   
165:
   var n_id = document.getElementById("n_id").value;
166:
    if (checkInputText(n_id, "Please enter a n_id")) return;
167:
   
168:
    var id = (new Date()).getTime();
169:
   //öka på dessa för att lägga till fler var
170:
    var todoItem = new Todo(id, dbid, description, category, categoryid, tax, tax_rate, amount, unit, unitid, lager, task, name, inprice, outprice, who, date, r_id, n_id);
171:
    todos.push(todoItem);
172:
    addTodoToPage(todoItem);
173:
    saveTodoItem(todoItem);
174:
}
175:
 
176:
function checkInputText(value, msg) {
177:
    if (value == null || value == "") {
178:
        alert(msg);
179:
        return true;
180:
    }
181:
    return false;
182:
}
183:
 
184:
function saveTodoItem(todoItem) {
185:
    if (localStorage) {
186:
        var key = "todo" + todoItem.id;
187:
        var item = JSON.stringify(todoItem);
188:
        localStorage.setItem(key, item);
189:
    }
190:
    else {
191:
        console.log("Error: you don't have localStorage!");
192:
    }
193:
}
194:
 
195:
function deleteItem(e) {
196:
    var span = e.target;
197:
    var id = span.parentElement.id;
198:
    console.log("delete an item: " + id);
199:
   
200:
   // find and remove the item in localStorage
201:
    var key = "todo" + id;
202:
    localStorage.removeItem(key);
203:
 
204:
    // find and remove the item in the array
205:
    for (var i = 0; i < todos.length; i++) {
206:
        if (todos[i].id == id) {
207:
            todos.splice(i, 1);
208:
            break;
209:
        }
210:
    }
211:
 
212:
    // find and remove the item in the page
213:
    var li = e.target.parentElement;
214:
    var ul = document.getElementById("todoList");
215:
    ul.removeChild(li);
216:
217:
 
218:
with (document.getElementById('task')) {
219:
    onblur = function(e) {
220:
        var elm = e.target;
221:
        setTimeout(function(){elm.focus()});
222:
    }
223:
    onkeydown = function(e) {
224:
        var key = e.which || e.keyCode;
225:
        if (key == 9) e.preventDefault();
226:
        // code for tab is 9
227:
    }
228:
}


Inputen fylls med info från en scanning från en streckkodsläsare, det inscannade går iof genom ett program som trycker in det scannade med kodsnutten

KOD:
1:
function processData (arrData)
2:
{
3:
  var sData = DataToString(arrData);
4:
 
5:
  Print("Data: " + sData);
6:
  if (!SendKeyStrokes (sData.replace(/\x00/g, " ") + "{ENTER}"))
7:
    NotifyWarning("Ignoring keystrokes sent. Please set focus to the target application.");
8:
}


Om jag fyller formuläret för hand så hamnar allt som det ska i localstorage, åäö inkluderat.

Ser du/ni något uppenbart?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4533 dagar
Från: Tavesta
Status: Offline



#742351
Inlägg Skrivet: 2018-10-24 13:49      Ämne: Citera

Streckkodsläsare har i normalläget en hel del problem med ÅÄÖ.
Oftast brukar det vara så att den måste konfigureras så den stämmer med det tangentbord som används.

Sedan gäller det att det görs rätt när streckkoden skapas också, så det stämmer med standarden för streckkodstypen.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marcusgarden



Medlem i: 3072 dagar

Status: Offline



#742352
Inlägg Skrivet: 2018-10-25 16:13      Ämne: Citera

Ok, hur gör jag då?

Hur ska jag spara i db?
KOD:
1:
St&ouml;rsta j&auml;vla chokelabollen med str&ouml;ssel p&aring;!

eller
KOD:
1:
Största jävla chokelabollen med strössel på!

eller annat för att javascript ska kunna läsa innehållet och spotta ut åäö?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
harald_b
Moderator



Medlem i: 4533 dagar
Från: Tavesta
Status: Offline



#742357
Inlägg Skrivet: 2018-10-25 22:08      Ämne: Citera

När du sparar i databasen bör du använda ren text.
När du skall överföra datat till javascript brukar json_encode vara det mest lämpade.

Men vad jag förstod på ditt förra inlägg så fungerade det som det skulle när du skrev in för hand, men inte när du använde streckkodsläsaren?
Om åäö som försvinner kommer från streckkoden så kan du börja med att skanna streckkoden utan att använda något program som bearbetar datat, och se om åäö fungerar då.
Om det försvinner då med så är det streckkoden eller streckkodsläsaren som är problemet.
I annat fall är det programmet som bearbetar datat som trasslar, och då bör du kanske ta en titt på vad DataToString() gör.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » HTML/CSS/JavaScript/Design
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic