Echo table with special chars from database - php

I have a database table with special characters like ă â î ş ţ and I am trying to echo the table correctly with all the special characters.
I used this:
<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
And I used this code:
mysql_query("SET character_set_results=utf8", $legatura);
mb_language('uni');
mb_internal_encoding('UTF-8');
mysql_query("set names 'utf8'",$conn);
mysql_query("SET character_set_client=utf8", $conn);
mysql_query("SET character_set_connection=utf8", $conn);
mysql_query("SET character_set_results=utf8", $conn);
But I only get "?" and "�" where the special characters are.
The database and the tables from it are in collation: utf_8_unicode_ci

After all it worked with this
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>

Related

PHP - Display characters in Arabic?

The problem is the display of the Arabic language in php, with French and English it works well but in Arabic it only displays the: ???
this is a code
`
// connexion
$host="****";
$user="****";
$password="****";
$dbname="****";
$con=mysqli_connect($host,$user,$password,$dbname);
$lang = trim($_GET['lang']);
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES 'utf8'");
$sql="SELECT title,image,rating,releaseYear,id,pays,language FROM user WHERE language='$lang' and pays='$rtt ' ORDER BY `user`.`id` DESC" ;
$result=mysqli_query($con,$sql);
if($result)
{
while($row=mysqli_fetch_array($result))
{ $flag[]=array('title'=>utf8_encode($row['title']),'image'=>$row['image'],'rating'=>utf8_encode($row['rating']),'releaseYear'=>$row['releaseYear'],'id'=>$row['id']);
}
print_r(json_encode($flag, JSON_UNESCAPED_UNICODE));
}
mysqli_close($con);
?>`
this is a image enter image description here
Did you verify your browser charset ?
<head>
<meta charset="utf-8">
</head>

Can't add an UTF-8 string into MySQL? [duplicate]

This question already has answers here:
UTF-8 all the way through
(13 answers)
Closed 7 years ago.
I can't add an UTF-8 string into MySQL DB. Here's the code:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<?php
$temp='papà';
mysql_query("SET NAMES utf8");
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
mysql_query("INSERT INTO comment VALUE ('$temp')") or die(mysql_error());
?>
</body>
</html>
the variable in DB is a CHAR(120) and with a non-utf8 string it works properly.
The error is the generic "You have an error in your SQL Syntax ecc."
Thanks in advance for your help.
Use the following code:
<?php header('Content-Type: text/html; charset=utf-8'); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<?php
$temp='papà';
mysqli_query("INSERT INTO comment VALUE ('$temp')") or die(mysqli_error());
?>
</body>
</html>
stop using mysql_* and start using mysqli_* or use PDO
After converting to mysqli_*, use set_charset. Don't do the rest of the SETs. (PDO has the charset in the dsn.)
Is the column in the table CHARACTER SET utf8?
Are the bytes in the encoded utf8-encoded? In utf8, then hex for à is C3A0. In latin1, it is F0.
It is almost always better to use VARCHAR than CHAR.
If you have more troubles, do SELECT col, HEX(col) FROMcoment...; -- that will probably give the best clue of what still broken.

Store Arabic text in mysql database using php [duplicate]

This question already has answers here:
UTF-8 all the way through
(13 answers)
Closed 1 year ago.
I am trying to store some Arabic data in a mysql database
I have set the html document charset to be 'utf8'
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
MySQL charset is set to: UTF-8 Unicode (utf8)
MySQL connection collation is set to: utf8_general_ci
Database and table collations are set to: utf8_general_ci
In addition in my php code I used the $mysqli->set_charset("utf8") function to ensure that the charset is set to be ut8 but nothing is actually working , I am posting my data to the php script using html form where the enctype is : enctype="multipart/form-data" because in this form I also upload an image
The weird thing is that when I write my query directly in mysql the Arabic characters are stored properly with no problem , but when I use a php query to store the data all the characters are stored in a wrong charset encoding
Any suggestions ?
Weird, It should work!
Try adding these lines after a successful connection to the database:
$mysqli->query("SET NAMES 'utf8'");
$mysqli->query("SET CHARACTER SET utf8");
For example:
$mysqli = #new mysqli('DB_HOST', 'DB_USER', 'DB_PASS', 'DB_NAME');
if($mysqli->connect_errno) die('Connection Error!');
else{
$mysqli->query("SET NAMES 'utf8'");
$mysqli->query("SET CHARACTER SET utf8");
}
And include these META tags in the head section of your php page:
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Browsers will ignore the <meta http-equiv ...> tag if there is a http header present. Try putting this at the top of your php page:
header("Content-Type: text/html; charset=UTF-8");
save this file in ur website, htdocs folder as "dbh.php, then in include it at the top of your index page by typing <?php include 'dbh.php';?> and you u are ready to go.
<?php
$conn = mysqli_connect("localhost", "root", "", "database name");
if(!$conn){
die("connection failed: ".mysqli_connect_error());
}else{
$conn->query("SET NAMES 'utf8'");
$conn->query("SET CHARACTER SET utf8");
}
You may try this. It should work
<?php
$conn = mysqli_connect(<host>, <user name>, <password>, <database name>);
if(!$conn){
die("could not connect: ".mysqli_connect_error());
}else{
mysqli_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);
}
?>

How to display Germany Umlauts (ü, ä, ö) from sql in Php?

I am trying to display this German character the proper way, if I don't use htmlentities() the output is unabh�ngig, but when I try to use htmlentities() the word is missing, why is that?
<?php
$str = htmlentities("unabhängig");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
<meta charset='utf-8'>
</head>
<body>
</body>
<div><?php echo $str;?></div>
I had the same problem with the ü, ä, etc.
Right after selecting the database I implemented this two lines:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
as suggested here:
http://www.flashhilfe.de/forum/serverseitige-programmierung/php-mysql-wie-utf-8-beim-connect-festlegen-225225-225225.html
Best, Yannis
You should just be able to send ü without encoding it separately by ensuring that the charset is set to utf-8 using HTTP header.
If for some reason you can't do that, use:
Ü = Ü
or
ü = ü
This is the format for charset:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Make sure your encoding is not being forced by htaccess or apache. check what is the selected encoding in your browser when you view the site, if it is not utf-8, then it is being forced. If forced you can add this to htaccess
AddDefaultCharset UTF-8
Make sure your database table is in utf-8
Make sure your connection to your database is in utf-8 http://php.net/manual/en/function.mysql-set-charset.php
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);
You can pass UTF-8 encoding to htmlentities to make it use correct encoding. or you can use htmlspecialchars http://php.net/manual/en/function.htmlentities.php
And if you don't want to worry about so many different charset codings or if htmlentities doesn't work for you, here the alternative:
I used mysqli DB connection (and PHPV5) Form post for writing/inserting to MySQl DB.
$Notes = $_POST['Notes']; //can be text input or textarea.
$Notes = str_replace('"', '"', $Notes); //double quotes for mailto: emails.
$von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); //to correct double whitepaces as well
$zu = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é");
$Notes = str_replace($von, $zu, $Notes);
echo " Notes:".$Notes."<br>" ;
$Notes = mysqli_real_escape_string($link, $Notes); //for recommended mysqli DB connection.
//$Notes = mysql_real_escape_string($Notes); //for old deprecated mysql DB connection.
// mysqli_real_escape_string Escapes special characters in a string for use in an SQL statement
echo " Notes:".$Notes ; //ready for inserting
enter code here
//Optional:
$charset = mysqli_character_set_name($link); //only works for mysqli DB connection
printf ("To check your character set but not necessary %s\n",$charset);

MySQL database query coding problem in PHP

Hello I have this problem: I have MySQL Database with collation latin1_bin. In database I have table with collation utf8_slovak_ci. All collumns is text. In rows I have values with ť í ž ľ š č(utf8) chars, but PHP code returns values with utf8 chars replaced by � , ? and other not readable chars. In html head I have set charset to utf-8. Please help me. I have this code:
//From config file
define ("DATABASE_SERVER", "localhost");
define ("DATABASE_LOGIN", "root");
define ("DATABASE_PASSWORD", "root");
define ("DATABASE_DATABASE", "novymost");
mysql_connect(DATABASE_SERVER, DATABASE_LOGIN, DATABASE_PASSWORD)or die(mysql_error());
mysql_select_db("novymost")or die(mysql_error());
$results=mysql_query("SELECT * FROM Downloads") or die(mysql_error());
$row = mysql_fetch_array( $result );
// Print out the contents of the entry
while($rows = mysql_fetch_array($results))
{
echo("<li>");
echo "<a href=\"".$rows["URL"];
echo("\">");
echo "".$rows["TITLE"];
echo(" - ".$rows["SIZE"]);
echo("</a>");
echo("<br/></li>");
}
run the query
mysql_query( "set names utf8" );
before runnign any other queries. This sets the connection charset
http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
In php:
header("Content-Type: text/html; charset=UTF-8");
In HTML:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
In Database before queries:
mysql_query( "set names utf8" );
Or you can also convert you latin-table to a UTF8-table:
INSERT INTO utf8table (utf8column)
SELECT CONVERT(latin1field USING utf8)
FROM latin1table;

Categories