PHP-da maxsus belgilar bilan birga tarkibni saqlash

Menda post_title , post_content va sana kiradigan add_post shaklim bor. post_content maxsus_karakterlar va HTML elementlari bo'lishi mumkin

Post_content ichida saqlash uchun muammo mavjud

Misol qatori:

sport zallari «Omma» deb atalgan ushbu noyob omil atrofida aylanadi.

Ushbu satrlarni ma'lumotlar bazasi jadvaliga qo'shishga harakat qilsam, masalan, quyidagi satr qo'shiladi:

sport zallari bu noyob omil atrofida aylanadi

Belgilar ( " " ') tufayli barcha ma'lumotlarni

Faqatgina ushbu belgilarni olib tashlashni istayman, shunda barcha post_content ma'lumotlarini qo'sha olaman

Men shuni sinab ko'rdim:

 $post_content=$_POST['post_content']; 
 $post_content=addslashes($post_content);
 $post_content=htmlentities($post_content);      
4
@KeithAsilom Men faqat barcha belgilarni emas, men aytib o'tilgan ba'zi belgilarni olib tashlashni xohlayman.
qo'shib qo'ydi muallif Deepak, manba
@KeithAsilom Qabul qilayotib, ushbu ramzlarni qayta istamayman.
qo'shib qo'ydi muallif Deepak, manba
Ma'lumotlar bazasiga ma'lumotlarni qanday kiritish mumkin? Qaysi ma'lumotlar bazasidan foydalanmoqdasiz? Ma'lumotlar bazasidagi qaysi charset? Sizning savolingiz aniq emas va hech qanday izlanish olib bormaydi.
qo'shib qo'ydi muallif Blackbam, manba
Quyida siz bir necha izohda qayd etdingiz: mysql_real_escape_string , lekin u ishlamadi. Buni qanday qilib va ​​nima sababdan ishlamayotganligini aniqroq aniqlang
qo'shib qo'ydi muallif Phil, manba
$ this-> db-> qo'shish ('xabarlar', $ ma'lumotlar);
qo'shib qo'ydi muallif Paul Spiegel, manba
@deep 3015 ning echimi siz uchun ishlashi kerak
qo'shib qo'ydi muallif Keith Asilom, manba
shuning uchun siz faqat bitta va ikkita tirnog'ini olib tashlashni istaysiz, ammo boshqa barcha maxsus belgilarni saqlamoqchimisiz? qanday qabul qilish haqida nima deb o'ylaysiz, bitta/ikkilik taklifni qayta istaysizmi?
qo'shib qo'ydi muallif Keith Asilom, manba
PHPdagi maxsus belgilar bilan birga tarkibingizni saqlash siz xohlagan narsangizga zid keladi Faqatgina ushbu belgilarni o'chirib tashlamoqchiman, shuning uchun barcha post_content ma'lumotlarini qo'shishim mumkin
qo'shib qo'ydi muallif Keith Asilom, manba

9 javoblar

I just want to remove these symbols so that I would be able to add all post_content data.

Bunga javob berish (savolning sarlavhasidan farqli o'laroq), ma'lumotlar bazasida saqlashdan oldin maxsus belgilarni olib tashlashingiz mumkin

public function clean($string) {
   $string = str_replace(' ', '-', $string);//Replaces all spaces with hyphens.
   $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string);//Removes special chars.
   $string =preg_replace('/-/', ' ', $string);//Replace hyphens with spaces.
   $string =preg_replace("/\s+/", " ", $string); //remove extra spaces
   return $string;
}

public function somFun(){
    $post_content=$_POST['post_content']; 
    $post_content=$this->clean(post_content);
    //proceed to modal function for saving in database
}

Edit To remove single and double quotes only

public function somFun(){
    $post_content=$_POST['post_content']; 
    $post_content=str_replace(array("'", "\"","“","”","’"), "", $post_content );
    $post_content=preg_replace("/\s+/", " ", $post_content); /*remove extra spaces*/
    //proceed to modal function for saving in database
}

You can do test using on line code tester

<?php
$str = "'test 'this' “ ” ’ string'";
$str= str_replace(array("'", "\"","“","”","’"), "", $str );
$str=preg_replace("/\s+/", " ", $str);
echo $str;

result will be test this string

3
qo'shib qo'ydi
Tarkibdagi tarkib maxsus belgilarni o'z ichiga olishi mumkin, shuning uchun men ularni o'chirishni xohlagan barcha maxsus belgilarni olib tashlamoqchi emasman ("" ").
qo'shib qo'ydi muallif Deepak, manba
Javobni yangilashni tekshiring
qo'shib qo'ydi muallif Deep 3015, manba

utf8 muammosi.

“ ” ’ are not ordinary ascii characters. If they are mis-fed to a CHARACTER SET utf8 column, the strings may be truncated. Is that what is happening? You get all the text up to, but not including, one of those quote charaters? If so, then the explanation and tips on fixing your code and/or schema are here -- search for "truncate".

Muammo shundaki, yuklangan baytlar lotin1da, utf8 emas, balki ulanish UTF-8 va stol/ustun ustunlari CHARACTER SET utf8 (yoki utf8mb4) sifatida belgilanadi.

Ushbu belgilar takliflar sifatida PHP yoki MySQL tomonidan tan olinmaganligi sababli, boshqa takliflarning ko'pchiligi hech qanday ta'siri yo'q.

2
qo'shib qo'ydi
@KeithAsilom Ha, u ishlaydi. Katta rahmat.
qo'shib qo'ydi muallif Deepak, manba
@KeithAsilom Ha, men fgetcsv() dan foydalanib. Mana mening kodim - $ data = array (); $ file = fopen ($ filename, "r"); ($ importdata = fgetcsv ($ file, 10000, ",")) == FALSE) {$ ma'lumotlar [sizeof ($ data)] = $ importdata; } fclose ($ fayl);
qo'shib qo'ydi muallif Deepak, manba
Aslida menda ommaviy yuklash varaqasi bor. Csv faylini ishlatish bilan bir vaqtning o'zida ko'plab yozuvlarni yuklashim mumkin. CSS fayli shu belgilarni o'z ichiga oladi.
qo'shib qo'ydi muallif Deepak, manba
@ Rik Ha Yo'q Men barcha matnni yuqorida eslatib o'tilgan belgilarga qadar olaman. Men "string" - sport majmualari atrofida "Jamiyat" deb nom olgan ushbu noyob omil atrofida ayta olaman deb o'ylayman. Bu jamoa ichida. Shu kabi bir narsa, keyin saqlangan ma'lumotlar o'xshash bo'ladi - bu noyob omil atrofida sport zallari aylanadi. Belgilangan vaqtdan keyin u nuqtadan kesilgan va ma'lumotlar bazasiga saqlanadi.
qo'shib qo'ydi muallif Deepak, manba
hamma narsa utf8 bo'lsa, siz utf8_encode shart emas.
qo'shib qo'ydi muallif Rick James, manba
Csv faylini o'qiyotganda @Deepak siz fgetcsv() dan foydalanmoqdasiz? Agar bu utf8 muammosi bo'lsa, ehtimol quyidagicha harakat qilishingiz mumkin: $ data = fgetcsv ("file.csv", "r"); $ data = array_map ("utf8_encode", $ data); - array_map, $ ma'lumotlarining har bir qiymatini utf8_encode funktsiyasiga yuboradi. Utf8 qiymatlarini kodlashdan so'ng, ehtimol endi str_replace yoki preg_replace kabi takliflarni sinab ko'rishingiz mumkin.
qo'shib qo'ydi muallif Keith Asilom, manba
Buni vaqt oralig'ida qo'shib qo'yishingiz mumkin: $ importdata = array_map ("utf8_encode", $ importdata);
qo'shib qo'ydi muallif Keith Asilom, manba

Agar siz CodeIgniter dan foydalanayotgan bo'lsangiz, u bilan bog'liq savollar mavjud: bu yerda va bu yerda , ikkita variant bor:

Use query building : Data will be escaped by PDO

$sql = "INSERT IGNORE INTO my_table(lat, lng, date, type) VALUES (?,?,?,?);"; 
$this->db->query($sql, array($data['lat'], $data['lng'], $data['date'], $data['type']));

Use db->escape() method : Explicitly escape data

$this->db->query("INSERT IGNORE INTO my_table(lat, lng, date, type) VALUES ('" . $this->db->escape($data['lat']) . "', '" .  $this->db->escape($data['lng']) . "', '" . $this->db->escape($data['date']$this->db->escape . "', '" . $this->db->escape($data['type']) . "')");

Umid qilamanki bu yordam!

2
qo'shib qo'ydi

Men bir xil narsalarni bitta hiyla bilan qildim

$html = base64_encode($this->input->post->('key'));

va ekran vaqtida buni hal qiling!

barcha maxsus belgilar muammolarini hal qiladi

1
qo'shib qo'ydi

Agar siz faqat olib tashlashni xohlasangiz

<?php
$html="a“”’b";
$res = preg_replace('/[^\x20-\x7E]/','', $html);
echo $res;
?>

Output ab

1
qo'shib qo'ydi

Bu qadriyatlarni doimo base64_encode »da bo'lishi mumkin, keyin u muhim emas ularda nima bor.

1
qo'shib qo'ydi

try use form helper to insert data and try like thisset_value('description') or use this htmlspecialchars($POST['description']) i use this to save data into database, and use to showing like this htmlspecialchars_decode($description)

0
qo'shib qo'ydi

Use mysql_real_escape_string

Misol uchun

$name='abc,cf';
 $name=mysql_real_escape_string($name);
0
qo'shib qo'ydi

Nima uchun mysqli_real_escape_stringdan foydalanayotganingizni bilmayman yoki nima uchun "" ma'lumotlar bazasiga "" kiritishni talab qilsam, kodigniterni ishlatib, matnni hech qanday muammosiz matnga kiritaman, buni kuzatib qo'yaman

tekshirgichda

 $coments = $this->input->post('comentario', true); 
    $query = $obj->Insertcoments($coments);

va modelda

function Insert($coments) {
        $data = array(
            'mensaje' => $coments);
        $this->db->insert('mensaje', $data);
    }
0
qo'shib qo'ydi
PhP |BotsUz
PhP |BotsUz
93 ishtirokchilar

Phpni o'rganishni Hohlasangiz https://t.me/joinchat/AAAAAE-KRc5dd5tPMmGmWA A'zo bo'lin