Skip to main content

Reading Unicode characters from MySQL with PHP



I've inherited a MySQL database which contains a field named Description of type text and collation of latin1_swedish_ci .





The problem with this field is it contains utf-8 data with some Unicode characters, e.g. character 733, etc. Sometimes this character also exists in the field represented as HTML encoded "&#733" as well.





I'm trying to read the table and export the data to a CSV file and I need to represent this character as a double quote.





Reading the HTML encoded character is easy enough. However, it appears that the actual Unicode character is converted to utf-8 before I can do anything with it resulting in a "?".





How do I read in the Unicode character 733 (U+02DD), recognize it and convert it?





Here's a simplified (not tested) version of the code.







<?

$testconn=odbc_connect ("TESTLIB", "......", "......");



$query="SELECT Description FROM TestTable";



$rsWeb=mysql_query($query));



$WebRow=mysql_fetch_row($rsWeb));

$Desc = $WebRow[0];

$Desc = str_replace('"','""',$Desc);



fwrite($output,"\"".$Desc."\",\r\n");

%>




Comments

  1. I think your connection charset is not utf8, that's why chars are being converted to '?'.

    Read this: http://dev.mysql.com/doc/refman/5.1/en/charset-connection.html

    Post result for query:
    show variables like 'char%';

    ReplyDelete
  2. You really should put only non-entity (Unicode) version in the database, and entity-decode the rest. However, when you want to use UTF-8 with MySQL, there are a few things to remember:


    Your table column's collation should be utf8_bin or similar.
    Your table's collation and database collation should also be utf8_bin just in case.
    Your connection charset should be UTF8. Do this by executing the "SET NAMES utf8" query.


    Also, if you're outputting a HTML page, that should have the UTF8 charset as well. If everything is correct, the UTF8 characters should come out fine.

    Good luck!

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.