Запис на стойности + !@#!@%^ символи

Hous

Registered
Чудя се ако имам една форма която се попълва и се изпраща за запис към дб,вместо да филтрирам символите !@#$%^&&*)_ ?> < и тн , как да направя така ,че да си се записват така както е написано,без да вредят на mysql заявката,тоест ако запиша
test _ ?> <
самия запис в дб-то да е
id | content
1 | test_?><
и после да мога да го покажа,пак без да вреди.

Имаше някакъв метод за преобразуване на тези символи в други в самата дб и после се "декодираха" когато се показват....?


ps:Опитах се така
Код:
function check_input($value)
{
// Stripslashes
if (get_magic_quotes_gpc())
  {
  $value = htmlentities(stripslashes($value));
  }
// Quote if not a number
if (!is_numeric($value))
  {
  $value = "'" . mysql_real_escape_string($value) . "'";
  }
  
  return $value;
}
......................
$mycontent=check_input($mycontent);
... insert into TABLE values $mycontent...
 
Защо не направиш да се записват като md5 и след това при извеждането да се декодва?
 
Аз до колкото знам md5 не се декодира... за това се използва за пароли,единствения метод е да се сравни .. :shock:
 
base64_encode е това което търсеш и след това decode на информацията, но разбира се след това htmlspecialchars или си ги филтрирай по - друг начин защото си уязвим за XSS.


EDIT:

Другото е може да използваш prepare заявки, вместо base64_encode.
 
eddyy93 каза:
base64_encode е това което търсеш и след това decode на информацията, но разбира се след това htmlspecialchars или си ги
Супер стана,не разбирам само защо след като то обръща всичко във кодиране и декодиране към дб-то (в смисал аз го кодвам и го пращам към дб във вид на asD13412309 и после го декодвам само припоказване,защо са ми тези specialchars ?и къде трябва в целия процес да се сложат...?
Код:
function checkinput($value)
{
//тук ? $value = htmlspecialchars($value);
$value = base64_encode($value);
return $value;
}
function decodeinput($value)
{
$value = base64_decode($value);
return $value;
}

//prashtam zaqvka
$sadarjanie=checkinput($_POST['text']);

//pokazavam zapisa
echo decodeinput($row[text]);
 
Окей опитах така:
Код:
function checkinput($value)
{
$value = htmlspecialchars($value);
$value = base64_encode($value);
return $value;
}
function decodeinput($value)
{
$value = htmlspecialchars_decode($value);
$value = base64_decode($value);
return $value;
}
и тествах тези стойности:
test special chars < ? ? > / ! @ # $ % ^ & * ( ) -= _+\ |

и през decodeinput ми показа:
test special chars < ? ? > / ! @ # $ % ^
проблем прави само
някаква идея как да го показва без да прави проблеми ?
 
Ами след декодиране информацията отново е в чист вид тоест неща от сорта <script type=''javascript'> .... са в сила и работят и ако не сложиш htmlspecialchars или някак да филтрираш тези неща, то ти си уязвим от към xss. Те докато са кодирани няма проблем, но декодират ли се (след извеждането им от базата данни) стават опасни ако не се филтрират.
 
Ами сложих го заедно със base64 както в последния пост показах,и само и единствено & символа ми прави проблеми,някакви идеи ?
 
Не може да ти прави проблеми ...

Имам предвид това:

PHP:
$data = 'alabla, nqkav tekst';
$data = base64_encode($data);
query('insert $data');

/** some code */

query('select data')
$data = base64_decode($row['data']);
$data = htmlspecialchars($data);
echo $data;

Другия вариант ти го казах:

Използвам PDO за него.
PHP:
$sql = "INSERT INTO table (data) VALUES (:data)";
$query = prepare($sql);
$query->bindParam(':data', $data, PDO::PARAM_STR);
$query->execute();

/** some code */

query(SELECT DATA);
echo htmlspecialchars($row['data']);
 
Ами показал съм я функциата която ползвам,пробвай със checkinput и decodeinput да направиш запис и да го покажеш,само този знак ми прави проблеми &
 
Ето с това го тествах:

PHP:
echo '<^&*(%#@!!#$^$&*)>';
$c = base64_encode('<^&*(%#@!!#$^$&*)>');
echo '<br />'.  base64_decode($c);

Казах ти, че няма проблеми. Ти изобщо не си ми погледнал кодовете, който ти пратих .... виж последователноста, по която ги правя.

Това че знака ти се променя е от htmlspecialchars. И както каза горе stormBreaker, седни да разгледаш какво прави тази функция.

А също така ти казах ако не искаш да ползваш base64_encode(); си ползвай PDO prepare statemnents (ако си мислиш, че все още грешката е в кодирането със base64). И после си ползвай htmlspecialchars при изваждането.
 
В интерес на истината,опитах точно както описа, и въпреки,че само го ecndode и decode през base64 пак самият символ не се показва...
не знам къде е проблема,дали в кодирането нещо ... utf8 и самия файл е utf-8 без BOM
:lol:
 

Back
Горе