Fixing Encoding Problems When Creating WordPress Posts With PHP

I’m documenting this simple fix because it took me over an hour to figure out. I was writing a WordPress plugin that would publish custom post types from one blog to many others. In doing so, I used PHP to write code that would read posts from the master blog and write them to another blog, or several blogs actually. The problem was that some characters such has hyphens and the letter y would end up encoded incorrectly in the blog that the post was copied to. Here’s two images that show what happened. The first is an image of the WYSIWYG editor in WordPress when viewing the post in the edit screen using the text tab. The second image is when viewing the post in the HTML tab of the WYSIWYG editor:

txt htm…so as you can see in the areas I’ve circled above, there is definitely something wrong with the character encoding happening somewhere.

Fixing Character Problems in WordPress and PHP

The solution was to use the following line of code on the post text before writing it to the WordPress database:

$txt = iconv(“UTF-8”, “ISO-8859-1//TRANSLIT”, $txt);

By using the PHP iconv function to convert the txt variable to a new encoding, I was able to stop the encoding problem and all was great! I’m not going to explain this in detail because frankly the finer details of PHP and HTML encoding elude me to this day after coding for over 15 years. I understand we need different encoding for different languages, but why can’t we have more of a standard? It would make life so much easier!

Summary

I hope this helps someone as it did me. Good luck with your own encoding problem. I find it is often necessary to play with several PHP encoding functions to solve various problems, so if this doesn’t do the trick, try htmlentities or utf8_encode and similar PHP functions to modify your text.

One Reply to “Fixing Encoding Problems When Creating WordPress Posts With PHP”

  1. Could you tell me please where I write your code $txt = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $txt); in my wordpress blog ?

Leave a Reply

Your email address will not be published. Required fields are marked *