I'm using wp_insert_post I loop over a text file one row at a time and for each row, I create a post. The text is set as the `post_title', for the text that is not utf8 the post inserts but with an empty title.

Why does that happen, if I'm able to create a post in the backend admin using non-utf8 chars it looks like WordPress converts the encoding in the backend.

How can I bypass this with wp_insert_post and have it insert the post title with non-utf8 chars?


  • 1
    Why do you want to insert invalid data into your database? This will break everything. And no, you cannot enter non-UTF-8 characters in the back end.
    – fuxia
    Commented Sep 20, 2013 at 16:51
  • @Toscho I just tested entering ā into a custom field from the backend and it saved. WordPress is correcting the slug which is great, and keeps the title and permalink in the backend but why not when I use wp_insert_post isn't it running the same actions as from the backend to create the posts?
    – Anagio
    Commented Sep 20, 2013 at 16:56
  • 3
    ā is a valid UTF-8 character, depending on the encoding. You have to make sure the correct encoding is used, or MySQL must reject the input. See this function for one way to do that.
    – fuxia
    Commented Sep 20, 2013 at 17:05

2 Answers 2


It could be due to the text encoding you are using is not set to UTF8, try to use iconv() and set.

iconv('ISO-8859-1','UTF-8', $post_info['post_content']);


This is where the WordPress data sanitization functions come in handy, specifically sanitize_text_field(). Try using that function on your text before/while inserting it. This should also be safe for the lines that are currently working.

   'post_title' => sanitize_text_field( $text_from_row )

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.