如何将带有“(ISO-8859-1)字符的字符串转换为普通(UTF-8)字符?

mut*_*nan 4 php mysql utf-8 iso-8859-1 character-encoding

<li>Jain R.K. and Iyengar S.R.K., “Advanced Engineering Mathematicsâ€, Narosa Publications,</li>
Run Code Online (Sandbox Code Playgroud)

我在数据库中有很多原始 html 字符串。所有的文字都有这些奇怪的字符。如何转换为普通文本以将其保存回数据库。

$final = '<li>Jain R.K. and Iyengar S.R.K., “Advanced Engineering Mathematicsâ€, Narosa Publications,</li>';
$final = utf8_encode($final);

$final = htmlspecialchars_decode($final);

$final = html_entity_decode($final, ENT_QUOTES, "UTF-8");

$final = utf8_decode($final);

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

我尝试了上面的代码,它在网络浏览器中正确显示,但仍然在数据库中保存了相同的奇怪字符。

数据库的字符集是utf-8

Ric*_*mes 5

“是“Mojibake”的。您可以尝试避免使用非 ascii 引号,但这只会延迟重新陷入困境。

您需要utf8mb4在您的表和连接中使用。有关Mojibake 的可能原因,请参阅此内容


mut*_*nan 5

$final = '<li>Jain R.K. and Iyengar S.R.K., “Advanced Engineering Mathematicsâ€, Narosa Publications,</li>';

$final = str_replace("Â", "", $final);
$final = str_replace("’", "'", $final);
$final = str_replace("“", '"', $final);
$final = str_replace('–', '-', $final);
$final = str_replace('â€', '"', $final);
Run Code Online (Sandbox Code Playgroud)

对于过去的数据,我用 UTF-8 字符替换了奇怪的字符。

对于未来的数据,我在 php、html 和数据库连接中将字符集设置为 utf8。