I’m in the middle of an update to Testimonial Basics and and I’ve been looking into an issue that is best characterized by a few user problems I have received :
Hello! I’m trying to add testimonials, but there is just ???? instead of cyrillic symbols. How can I resolve it? Thank you in advance.
I tried to submit a form in Hebrew. I got ????? instead of letters. Please make your plugin support UTF-8.
It turns out that this problem is related to the collation of the Testimonial Basics database table. So what is Collation? Taken from :
Character Sets and Collations in General
A character set is a set of symbols and encodings. A collation is a set of rules for comparing characters in a character set. Let’s make the distinction clear with an example of an imaginary character set.
Suppose that we have an alphabet with four letters: “A”, “B”, “a”, “b”. We give each letter a number: “A” = 0, “B” = 1, “a” = 2, “b” = 3. The letter “A” is a symbol, the number 0 is the encoding for “A”, and the combination of all four letters and their encodings is a character set.
Suppose that we want to compare two string values, “A” and “B”. The simplest way to do this is to look at the encodings: 0 for “A” and 1 for “B”. Because 0 is less than 1, we say “A” is less than “B”. What we’ve just done is apply a collation to our character set. The collation is a set of rules (only one rule in this case): “compare the encodings.” We call this simplest of all possible collations a binary collation.
But what if we want to say that the lowercase and uppercase letters are equivalent? Then we would have at least two rules: (1) treat the lowercase letters “a” and “b” as equivalent to “A” and “B”; (2) then compare the encodings. We call this a case-insensitive collation. It is a little more complex than a binary collation.
Further References :
WordPress Codex Posts :
Converting Database Character Sets
This is a good article on character sets and collation for further interested readers:WordPress Database Charset and Collation Configuration
Testimonial Basics Problems with Collation
When Testimonial Basics is first set up it uses the Default Collation for the MySQL setting. If MySQL is not set up for a specific character set and collation it will use a default which unfortunately, in many cases is latin1 character set and latin1_swedish_ci collation. This setup works fine for English but for some languages it causes the ???? to be returned. I don’t know why this happens, it will have something to do with certain characters not recognized and the dreaded ? being returned. I will be the first to admit that I’m a little out of my realm here. However I do know how to change the collation and character sets.
Disclaimer – The procedure below will show you how to go into your WordPress Database and change the collation on the Testimonial Basics Table. There is some risk here, and if you proceed it is at your risk. Back up your database, in case you are having problems. Only change the Testimonial Basics Table. See the references above if you need to change over the entire WordPress Database.
The next version of Testimonial Basics (now in testing) will use the WordPress core character set and collation (UTF8 and utf8_general_ci). You could transfer your testimonials to a notepad file, uninstall the old version and install the new version. Note that simply upgrading will not change the collation, you will have to install a clean version. The reason for this is that I will not go into existing databases and start messing with these kinds of settings. If you are comfortable with phpMyAdmin, you can skip this method and follow the steps below.
1) Log into phpMyAdmin with your database username and password. Go to your WordPress Database. You should see something like the screenshot below. Notice the collation for the Testimonial Table is latin1_swedish_ci and that the default is the same (arrow).
2) To change the default setting select the “Operations” tab. The next screenshot comes up Select “utf8_general_ci” from the drop down list and then “Go”.
3) Click the “Structure” tab and the screenshot below appears. Note that the default collation is now utf8_general_ci. In the wp_testimonial_basics line select “Structure”.
5) Change the table setting to utf8_general_ci and click “Go”. Go back to the “structure” tab and you will see that the table has been changed (at the bottom) but not the columns(presented as rows but are really table columns).
6) Select “Change” for one of the columns (I selected the “tb_group” column) and the screen below will appear. Change the “tb_group” collation to “utf8_general_ci”.
7) Repeat for the other columns
Your Testimonial Basics database table collation is now set to utf8_general_ci. I believe this should solve many of these ???? issues. If you are still having problems drop me a line and I will continue to pursue the problem. I am certainly far from having confident knowledge about character sets and collation, so if you have anything further to add, please comment.