如何从PHP中的mysql数据库中获取unicode字符

时间:2014-05-10 18:03:39

标签: php html mysql unicode

我正在开发一个以当地语言提供信息的本地网站。在我的MySQL数据库中,有一个名为pageContent的表,它有一个名为" text"的列。那"文字"列类型为文本,排序规则为utf8_sinhala_ci

enter image description here

在MySQL中,它通常显示字体:

enter image description here

但是当我把它带到PHP页面并回显该值时,它会显示??????????之类的问号。

enter image description here

但如果我硬编码并回显,那么它也会在PHP页面中正常显示。

enter image description here

当我从数据库中获取值时,我感觉出了问题。但我找不到错误。 我也试过以下代码。

mysql_query ("set collation_connection='utf8_sinhala_ci'"); 
  $result =  mysqli_query($this->connecDB,"SELECT * FROM pageContent");  

但这不起作用。

3 个答案:

答案 0 :(得分:3)

  

当我从数据库中获取值时,我感觉出了问题。但   我无法找到错误。我也试过以下代码。

您需要确保从连接,数据库到表的整个链都是UTF8清理。我对a similar question here有详细的解答。

但在您的情况下,请检查实际的MySQL服务器my.cnf文件。以下将整个链设置为UTF-8:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

立即查看您的代码:

mysql_query("set collation_connection='utf8_sinhala_ci'"); 
$result = mysqli_query($this->connecDB,"SELECT * FROM pageContent");  

在一行中,您正在调用mysql_query,而下一行则调用mysqli_query。但这些是不应该一起使用的冲突方法。它应该像mysqli_query一样:

mysqli_query($this->connecDB, "SET collation_connection='utf8_sinhala_ci'"); 
$result = mysqli_query($this->connecDB,"SELECT * FROM pageContent");

请注意我在mysqli_query($this->connecDB,…之前设置SET collation_connection='utf8_sinhala_ci'的方式。这将在您用于$result的同一连接上发送查询。或许你可以试试这个:

mysqli_query($this->connecDB, "SET NAMES 'utf8'");
$result =  mysqli_query($this->connecDB, "SELECT * FROM pageContent"); 

答案 1 :(得分:1)

确保您自己的PHP文件使用与数​​据库相同的编码(UTF8)。这导致了我传递的错误。

如果这没有帮助,一个丑陋的解决方案是将输出转换为utf8_decode()

答案 2 :(得分:0)

所以在我的情况下,我曾尝试更改Meteor.methods({ 'testwsdl' () { var url = 'http://www.webservicex.com/CurrencyConvertor.asmx?wsdl'; var args = { FromCurrency: 'USD', ToCurrency: 'INR' }; try { var client = Soap.createClient(url); var result = client.ConversionRate(args); console.log(result); } catch (err) { if (err.error === 'soap-creation') { console.log('SOAP Client creation failed'); } else if (err.error === 'soap-method') { console.log('SOAP Method call failed'); } } return result; } }); 对于mysql的排序规则,并且必须将其更改为utf8mb4_unicode_ci

然后粘贴:

uft8_general_ci

在我执行SELECT命令之前。

这是我从db中读取的代码:

mysqli_set_charset( $con, 'utf8');

它就像一个魅力。祝一切顺利。上面的代码可以用于读取chineese,俄语或阿拉伯语或任何包含此类数据的mysql数据库表列中的国际语言。