我们最近从使用PHP 5.3.4的IIS 7.5迁移到了使用PHP 5.5的IIS 8。从MySQL提取数据时,我们遇到了问题。该问题在以前的基础结构中不存在。
从MySQL提取字符串并将其显示给客户端时,编码显示不正确。
前任:
文本应在旧基础结构上按原样显示:
“桑德拉和卡洛斯在这一集中计划了什么?
但显示为:
“桑德拉和卡洛斯在这一集中计划了什么?”
我尝试了以下方法:
向客户端添加标头会将所有内容解释为UTF-8,无需更改。
header('content-type:text / html; charset = utf-8');
回显下面的编码字符:(它们正确显示给客户端:äöü€。)
“ \ xc3 \ xa4”。“ \ xc3 \ xb6”。“ \ xc3 \ xbc”。“ \ xc3 \ x9f”。“ \ xe2 \ x82 \ xac”;
为UTF-8将编码选项添加到html_entity_decode中。没变化。
有任何想法吗?代码打击。
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
// CONNECT TO THE DATABASE
$DB_NAME = 'removed';
$DB_HOST = 'removed';
$DB_USER = 'removed';
$DB_PASS = 'removed';
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// A QUICK QUERY ON A FAKE USER TABLE
$query = "SELECT * FROM `tablename` WHERE `item`='1234'";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
// GOING THROUGH THE DATA
if($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo html_entity_decode($row['prompt']);
}
}
else {
echo 'NO RESULTS';
}
// CLOSE CONNECTION
mysqli_close($mysqli);
看起来您的数据库是以Latin 1编码而不是UTF8存储的,快速解决方法应该是使用以下语法:
<?php
echo html_entity_decode($row['prompt'],ENT_COMPAT | ENT_HTML401,'ISO-8859-1');
真正的解决方法是修复数据库以将数据存储在UTF8中,并将所有工具链都存储在UTF8中。
自PHP 5.4起,html_entity_decode()将UTF8作为默认编码:http : //fr2.php.net/manual/en/migration54.other.php
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句