Setting PHP default encoding to utf-8?
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';
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^
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, 2020Comments
-
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 saydefault_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 about 12 yearsFor Apache, I don't have an
http.conf
file. I use WAMPserver and they ship Apache with anhttpd.conf
file. I suppose they're the same thing? Also, is that a line you manually add? There's nothing about charset in myhttpd.conf
file. -
Ben D about 12 yearsthat 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 likeInclude 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 over 10 yearsIs there some sort of explanation explaining what all those encoding functions do?
-
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 over 10 yearsThe listed settings. There's lots from iconv and mb_string.
-
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 over 6 yearsFixed, @miguel, sorry
-
Kiran over 6 yearsno need to use AddDefaultCharset in http.conf. see httpd.apache.org/docs/2.4/mod/core.html. meta will override this.
-
Peter Mortensen about 2 yearsWhat do you mean by "without the dash"? They look the same.