Latin-1/UTF-8编码php

Pau*_*ley 2 php mysql utf-8

我有一个UTF-8编码的db,混合了Latin-1.(我认为这就是问题)

这是角色在数据库中的外观.

İ (should be ?)
è
Run Code Online (Sandbox Code Playgroud)

当我将标题设置为

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
Run Code Online (Sandbox Code Playgroud)

然后角色出现:

 ?
 ?
Run Code Online (Sandbox Code Playgroud)

当我删除标题时,它们会在数据库中出现.我希望他们这样出来:

 ?
 è
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我正在寻找一种方法来解决这个问题.我目前无法纠正数据本身,这是正确的做法.

Jon*_*Jon 10

您的HTML输出需要采用单一编码,没有办法解决这个问题.这意味着需要首先将不同编码中的内容转换为HTML编码.虽然可以使用iconv或者mb_convert_encoding,但是您必须解决两个问题:

  1. 您需要知道(或猜测)内容的当前编码
  2. 您需要在任何地方手动执行此操作

例如,理论上的解决方案是选择UTF-8作为HTML编码,然后对要输出的所有字符串执行此操作:

$string = '...'; // from the database

// If it's not already UTF-8, convert to it
if (mb_detect_encoding($string, 'utf-8', true) === false) {
    $string = mb_convert_encoding($string, 'utf-8', 'iso-8859-1');
}

echo $string;
Run Code Online (Sandbox Code Playgroud)

上面的代码假设非UTF-8内容是用latin-1编码的,根据你的问题,这是合理的.