我知道很多时候都会被问过......
是的,我在谷歌,StackOverflow等搜索,但我没有解决我的问题。
我使用从互联网上获取的脚本:
<?php
// Create connection
$con=mysqli_connect("mysql.example.com","example_example","password","example_exa");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// This SQL statement selects ALL from the table 'Locations'
$sql = "SELECT * FROM Frasi";
// Check if there are results
if ($result = mysqli_query($con, $sql))
{
// If so, then create a results array and a temporary one
// to hold the data
$resultArray = array();
$tempArray = array();
// Loop through each row in the result set
while($row = $result->fetch_object())
{
// Add each row into our results array
$tempArray = $row;
array_push($resultArray, $tempArray);
}
// Finally, encode the array to JSON and output the results
echo json_encode($resultArray);
}
// Close connections
mysqli_close($result);
mysqli_close($con);
?>
获取结果并将它们放入数组(可变)。问题是当我插入重音符号如“àèìòù”时,我得到一个“null”字符串,而正确显示没有重音符号的字符串。
[{"Frasi":null},{"Frasi":"Senza accento, funziona!"}]
在PhpMyAdmin中,我将所有内容设置为UTF-8,然后设置为utf8mb4_unicode_ci ...但无法正常工作。 我尝试了“SET NAMES'utf-8'”,但没有。 我试过htmlentities((string)$ value,ENT_QUOTES,'utf-8',FALSE); ......什么也没有
我的托管用途:
cpsrvd 11.42.1.20 数据库客户端版本:libmysql - 5.0.96 PHP扩展:mysql
服务器:mysql.netsons.com通过TCP / IP 服务器类型:MySQL 服务器版本:5.5.36-log - MySQL社区服务器(GPL) 协议版本:10 用户:duxnzsje@srv-hp16.netsons.net 服务器字符集:UTF-8 Unicode(utf8)
请问任何想法?
谢谢!
答案 0 :(得分:1)
从我们实际看到的内容来看,解决方案应该是这样的:
<?php
// Create connection
$con=mysqli_connect("mysql.example.com","example_example","password","example_exa");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// This SQL statement selects ALL from the table 'Locations'
$sql = "SELECT * FROM Frasi";
// Check if there are results
if ($result = mysqli_query($con, $sql))
{
// If so, then create a results array and a temporary one
// to hold the data
$resultArray = array();
$tempArray = array();
// Loop through each row in the result set
while($row = $result->fetch_object())
{
// Add each row into our results array
foreach ($row as $key => $value) {
$tempArray[$key] = iconv(mb_detect_encoding($value), 'UTF-8', $value);
}
array_push($resultArray, $tempArray);
$tempArray = array();
}
// Finally, encode the array to JSON and output the results
echo json_encode($resultArray);
}
// Close connections
mysqli_close($result);
mysqli_close($con);
?>
诀窍似乎在那里:
foreach ($row as $key => $value) {
$tempArray[$key] = iconv(mb_detect_encoding($value), 'UTF-8', $value);
}
事实上,由于你的值可能不是UTF-8编码的,你可以使用comfort iconv函数轻松编码它们(意大利文档:http://www.php.net/manual/it/function.iconv.php)。
从上面的示例中,我们只是获取字符串的当前编码,并且无论当前编码如何,我们都将其转换为utf-8。
希望它有所帮助!
另外,忘了说:utf8_encode不工作,因为utf8_encode要求输入字符串是ISO-8859-1编码,而上面的字符串是ASCII。
此外,您还应该在PHP中手动设置mysqli字符集,也许您遇到的所有问题都与此相关:http://php.net/manual/en/mysqli.set-charset.php
编辑:连接后($ con之后),试试这个:
if (!mysqli_set_charset($con, "utf8")) {
printf("Error loading character set utf8: %s\n", mysqli_error($link));
} else {
printf("Current character set: %s\n", mysqli_character_set_name($link));
}
然后,在此之后,也写下这个:
mb_internal_encoding("UTF-8");
此外,如果您回复某些内容,请确保将您的HTML页面定义为字符集定义为utf-8。在<head>
区域中,插入以下内容:
<meta charset="utf-8">
答案 1 :(得分:0)
迟到了。这不应该是一个完整的答案,但它是关于已批准答案的iconv()函数的一个重要信息:我有同样的OP问题,当我的字符串至少包含时,我总是从iconv()函数得到FALSE 1 UTF-8 char,因为iconv()函数使用的lib中存在问题,如here所示。
所以,对我来说,解决方案是非常接近已接受的解决方案,而是使用mb_convert_encoding()函数。