Setting PHP default encoding to utf-8?

183,353

Solution 1

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.

Solution 2

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.

Solution 3

I had a problem on my MySQL query that it would not recognize some Latin accentuation, so the query would fail. I thought it could be the PHP file and so on, till I found out that using PDO to call the MySQL function I had to add the character set. The weird thing is that on the previous server I used it worked fine!

$dsn = 'mysql:host=localhost;dbname=retirodo_main;charset=utf8';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
Share:
183,353
JDelage
Author by

JDelage

Originally from France. I have been living in Seattle since Nov 98. I have a business education and worked for AMZN (98-03) and MSFT (03-08). I started to learn programming in late 2009. I'm very much a beginner at this point.

Updated on February 02, 2020

Comments

  • JDelage
    JDelage about 4 years

    In the "PHP Cookbook", they say (p.589) that to properly set the char 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 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 semi-colon 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?

  • JDelage
    JDelage about 12 years
    For Apache, I don't have an http.conf file. I use WAMPserver and they ship Apache with an httpd.conf file. I suppose they're the same thing? Also, is that a line you manually add? There's nothing about charset in my httpd.conf file.
  • Ben D
    Ben D about 12 years
    that was actually a typo on my part (corrected). If you don't see a reference to AddDefaultCharset in the config file, you may want to look through the config included files (it will some something like Include conf/extra/[something]) to see if it is set in any of those. If not, just add it to the main httpd.conf file.
  • CMCDragonkai
    CMCDragonkai over 10 years
    Is there some sort of explanation explaining what all those encoding functions do?
  • Ben D
    Ben D over 10 years
    @CMCDragonkai - are you just asking for a general explanation of character encoding, or specifically what the listed settings control?
  • CMCDragonkai
    CMCDragonkai over 10 years
    The listed settings. There's lots from iconv and mb_string.
  • Miguel
    Miguel over 6 years
    @Marcos when you edited the answer i see the bold was lost, and translated to " ** " ... The asnwer should not be that text you see. Since thats the bold markdown.
  • Marcos Pérez Gude
    Marcos Pérez Gude over 6 years
    Fixed, @miguel, sorry
  • Kiran
    Kiran over 6 years
    no need to use AddDefaultCharset in http.conf. see httpd.apache.org/docs/2.4/mod/core.html. meta will override this.
  • Peter Mortensen
    Peter Mortensen about 2 years
    What do you mean by "without the dash"? They look the same.