带有html_entity_decode和IIS8的PHP 5.5

胡安·瓦德兹(JuanValdez)

我们最近从使用PHP 5.3.4的IIS 7.5迁移到了使用PHP 5.5的IIS 8。从MySQL提取数据时,我们遇到了问题。该问题在以前的基础结构中不存在。

从MySQL提取字符串并将其显示给客户端时,编码显示不正确。

前任:

文本应在旧基础结构上按原样显示:

“桑德拉和卡洛斯在这一集中计划了什么?

但显示为:

“桑德拉和卡洛斯在这一集中计划了什么?”

我尝试了以下方法:

  1. 向客户端添加标头会将所有内容解释为UTF-8,无需更改。

    header('content-type:text / html; charset = utf-8');

  2. 回显下面的编码字符:(它们正确显示给客户端:äöü€。)

    “ \ xc3 \ xa4”。“ \ xc3 \ xb6”。“ \ xc3 \ xbc”。“ \ xc3 \ x9f”。“ \ xe2 \ x82 \ xac”;

  3. 为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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章