Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting PHP default encoding to utf-8?

In the "PHP Cookbook", they say (p.589) that to properly set the character encoding of outgoing data to UTF-8, it is necessary to edit the default_encoding configuration to utf-8.

However, I cannot find this configuration in file php.ini. Should I simply add a line that would say default_encoding = "utf-8"?

I do have a ;default_charset = "iso-8859-1". As you can see (;), right now it is not activated. Should I remove the semicolon and set it to "utf-8"? Does that take care of the default encoding?

I also found other encoding directives that I don't know what to do about:

[iconv] ;iconv.input_encoding = ISO-8859-1 ;iconv.internal_encoding = ISO-8859-1 ;iconv.output_encoding = ISO-8859-1 ... ; http://php.net/exif.encode-unicode ;exif.encode_unicode = ISO-8859-15 ... ;mssql.charset = "ISO-8859-1" ... ;exif.encode_unicode = ISO-8859-15 

Is there any reason why I shouldn't simply replace them all with utf-8?

like image 525
JDelage Avatar asked Feb 19 '12 18:02

JDelage


People also ask

Does PHP use UTF-8?

PHP | utf8_encode() FunctionThe utf8_encode() function is an inbuilt function in PHP which is used to encode an ISO-8859-1 string to UTF-8. Unicode has been developed to describe all possible characters of all languages and includes a lot of symbols with one unique number for each symbol/character.

What is the default encoding for PHP?

There is a character encoding setting inside of your php. ini file. By default, this is set to the standard Latin encoding (ISO-8859).

How do I make mysql handle UTF-8?

To change the character set encoding to UTF-8 for the database itself, type the following command at the mysql> prompt. Replace dbname with the database name: Copy ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci; To exit the mysql program, type \q at the mysql> prompt.


2 Answers

You should set your default_charset to UTF-8:

default_charset = "utf-8" 

(PHP Cookbook may have a typo in it if they ask you to change the default_encoding — I've never heard of it.)

You'll also want to make sure that your web server is set to output UTF-8 if you're going to outputting UTF-8 encoded characters. In Apache, this can be set by in the httpd.conf file:

AddDefaultCharset UTF-8 

As for modifying the iconv, exif, and mssql encoding settings, you probably don't need to set these (your settings have these commented out anyhow), but it's a good idea to change them all to UTF-8 anyhow.

like image 141
Ben D Avatar answered Sep 24 '22 00:09

Ben D


Modify the line

;default_charset = "iso-8859-1" 

to read

default_charset = "utf-8" 

About the other options, do not touch them. Avoid default settings, always explicitly set the encoding of in everything you do

  • database connections,
  • reading and writing files,
  • converting with iconv.

Also, beware of the encoding in which your PHP files are saved, make sure that they are in UTF-8, especially if they contain strings to be displayed or compared.

like image 22
gioele Avatar answered Sep 24 '22 00:09

gioele