[PHP] Izločanje pokvarjenih podatkov
6 naročnikov
6 naročnikov
Pozdravljeni!
Najprej opravičilo za čuden naslov, ampak nisem vedel kako drugače naj opišem svojo težavo.
Torej na strežnik dobivam podatke. Gre za preproste stringe/stavke, ki jih nato zapisujem v bazo. Težava je, da se ti stavki pogosto na poti do mojega strežnika pokvarijo, zato bi jih rad nekako filtriral in jih ignoriral.
Primer normalnih sporočil ko je prenos OK:
Danes je lep in jasen dan.
Ceste so suhe in normalno prevozne.
Primer pokvarjenih sporočil ko gre pri prenosu kaj narobe:
WHC - 90E??G?(?UUUUUUUUUUUU??8
š?y=E=E
Š466274200 354Š
osJ}QRš - 98E??A??%w
Č"?/?GWHc+dq?rx - 9
Č"?/?GWHs+dyČ"?-svZ?c+d?pž?(.??/fA?rž - 90E?X"?
To je primer dejanskih sporočil iz strežnika, ki se jim želim izogniti.
Kakšna ideja?
Hvala v naprej.
9 odgovorov
Na kakšen način pa pošiljaš podatke, da se ti tako pokvarijo?
Dobiš vsako sporočilo posamezno? Recimo, te čudne znake, ki jih imaš gor so neko enotno sporočilo?
Na tvojem mestu bi zadevo popravil na tak način, da do takih napak pri prenosu nebi več prihajalo. Mogoče base64encode ali kakšna podobna rešitev, odvisno od tega kje pri prenosu se ti podatki takole zmaličijo.
V primeru, da ne moraš vplivati na prenos in da je tisto gori kompletno sporočilo, bi poskusil rešiti zadevo z regexom. Se pravi, da preverjaš čudno kombinacijo znakov ??/, ??%, itd.
Ampak kot sem rekel, najbolj proper bi bilo popraviti prenos, da do tega ne prihaja več :) Povej več :P
@mraz1337 hvala, zgleda obetavno!
@sikmajnd če bi se dalo vplivat na sam prenos, bi bilo to super, a žal ne gre (gre za prenos po zraku). Zgornji primeri so vsako sporočilo v svoji vrstici. Razmišljal sem že, da bi preverjal če je v sredini besede vprašaj, saj se ti zelo pogosto pojavljajo v teh pokvarjenih sporočilih, vendar bi rad neko bolj sigurno zadevo.
$someData = "BlahBlah";
$send = json_encode(array("data"=>$someData, "hash"=>md5($someData))); // pa tole pošlješ...
// ko prejemaš pa preverjaš če se hash ujema s podatki...
$someData = json_decode($send);
if($someData != null && md5($someData->data) == $someData->hash) {
echo 'Yaaay!';
} else {
echo ':(';
}
ali lahko spremeniš način pošiljanja? če lahko, potem narediš md5, sha ali karkoli podobnega celotnega sporočila in le tega pošlji zraven.
potem pa na strežniku ponovno narediš md5, sha.. sporočila, in še se ne ujema s poslanim, ignore...
edit: HexeR me je prehitel...
edit2: jsonencode in jsondecode odpade, ker če je sporočilo izmaličeno, potem bo vrglo error...
http://php.net/manual/en/function.json-decode.php
NULL is returned if the json cannot be decoded or if the encoded data is deeper than the recursion limit.
$someData != null
;)