MySQL disables string in special characters

I am trying to insert deleted POST data (articles submitted by iSnare) in MySQL with PHP. The data is successfully received from the remote POST sender, and I can write it to a text file without any problems.

Unfortunately, when it comes to inserting it into MySQL, MySQL disables the string (article) on a special char. I tried a lot, but still I was not successful!

I tried:

  • Reset characters with mysql_real_escape_string()
  • Using htmlentities()and htmlspecialchars()(with each parameter ..)
  • Sending a query SET NAMES utf8to MySQL before doing the rest
  • All tables and columns are encoded in UTF-8 encoding, and utf8_general_ci(also used utf8_unicode_ciand utf8_binas sorting)
  • Saving all PHP files as UTF-8

However, I could not find a solution. I will be very grateful if someone will help me solve this problem.


Here is my table definition and PHP codes:

Php

function guvenlik_sql($x){

    // Cleans inputs agains sql injection
    return mysql_real_escape_string(htmlentities(stripslashes($x)), ENT_QUOTES);
}    

// Check if data really comes from an Isnare.com server (Address hidden)
if ($_SERVER['REMOTE_ADDR'] == $isnareIP || $_SERVER['REMOTE_ADDR'] == "xxx.xxx.xxx.xxx") {

    $title = guvenlik_sql($_POST["article_title"]);
    $first_name = guvenlik_sql($_POST["article_author"]);
    $description = guvenlik_sql($_POST["article_summary"]);
    $category = guvenlik_sql($_POST["article_category"]);
    $article = guvenlik_sql($_REQUEST["article_body_text"]);
    $article_html = guvenlik_sql($_POST["article_body_html"]);
    $resource_box = guvenlik_sql($_POST["article_bio_text"]);
    $resource_box_html = guvenlik_sql($_POST["article_bio_html"]);
    $keywords = guvenlik_sql($_POST["article_keywords"]);
    $email = guvenlik_sql($_POST["article_email"]);

    $fp = fopen('test.txt', 'a');
    fwrite($fp, $title."\n");
    fwrite($fp, $article."\n\n\n\n");
    fclose($fp);

mysql_query("INSERT INTO articles " . 
            "(" . 
                "first_name, " . 
                "email, " . 
                "title, " . 
                "description, " . 
                "article, " . 
                "article_html, " . 
                "category, " . 
                "resource_box, " . 
                "resource_box_html, " . 
                "keywords, " . 
                "distributor, " . 
                "distributor_host" . 
            ") VALUES (" . 
                "'$first_name', " . 
                "'$email', " . 
                "'$title', " . 
                "'$description', " . 
                "'$article', " . 
                "'$article_html', " . 
                "'$category', " . 
                "'$resource_box', " . 
                "'$resource_box_html', " . 
                "'$keywords', " . 
                "'$isnare', " . 
                "'$_SERVER['REMOTE_ADDR']', " . 
            ")") or die(mysql_error());

} //end if security

Table definition

CREATE TABLE `articles` (
   `article_ID` int(11) NOT NULL auto_increment,
   `first_name` varchar(100) NOT NULL,
   `last_name` varchar(100) NOT NULL,
   `email` varchar(100) NOT NULL,
   `password` varchar(100) NOT NULL,
   `author_url` varchar(255) NOT NULL,
   `company_name` varchar(100) NOT NULL,
   `address1` varchar(100) NOT NULL,
   `address2` varchar(100) NOT NULL,
   `state_2digit` varchar(100) NOT NULL,
   `state` varchar(100) NOT NULL,
   `zip_code` varchar(100) NOT NULL,
   `country` varchar(100) NOT NULL,
   `phone` varchar(100) NOT NULL,
   `newsletter` varchar(100) NOT NULL,
   `title` varchar(255) NOT NULL,
   `description` text NOT NULL,
   `article` longtext NOT NULL,
   `article_html` longtext NOT NULL,
   `category` varchar(100) NOT NULL,
   `cat` varchar(100) NOT NULL,
   `resource_box` text NOT NULL,
   `resource_box_html` longtext NOT NULL,
   `keywords` varchar(255) NOT NULL,
   `publish_date` timestamp NOT NULL default CURRENT_TIMESTAMP,
   `distributor` varchar(255) NOT NULL default '',
   `distributor_host` varchar(255) NOT NULL,
   PRIMARY KEY  (`article_ID`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
+5
source share
7 answers

I just dealt with the same situation, the records were cut off where there should have been a special symbol (ä, ö, è, etc.). All my files are encoded with UTF8, the connection is encoded with UTF8, the tables are encoded with UTF8, but the records have been truncated.

My solution was: even more UTF encoding! :) Use utf8_encode()for entries that may contain special characters.

mysql_query("INSERT INTO articles (first_name, email, title, description, article, article_html, category, resource_box, resource_box_html, keywords, distributor, distributor_host) values (
                                  '" . utf8_encode($first_name) . "',
                                  '" . $email . "',
                                  '" . utf8_encode($title) . "',
                                  '" . utf8_encode($description) . "',
                                  // etc
+7
source

" utf8" , "set character set utf8".

0

, - , , ?

, , , , . , , windows .

0

1) sql, , ​​MySQL ( , )

2) mysqld "max_allowed_packet", , , .

3) ENT_QUOTES mysql_real_escape_string(). , htmlentities()

0

, , , : ! :

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

, - MAGIC:) ( , , , ...)

0

. , Latin-1 UTF-8. - , , , UTF-8, .

0

Use mysqli_set_charsetis what saved me for me:

$conn = new mysqli($host, $username, $password, $database);
mysqli_set_charset($conn, 'utf8');
0
source

All Articles