我对 utf8_decode() 的行为感到困惑,只想澄清一下。我希望没关系。
这是一个简单的 HTML 表单,我用它来捕获一些文本并将其保存到我的 MySQL 数据库(它使用 utf8_general_ci 排序规则):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form action="update.php" method="post" accept-charset="utf-8">
<p>
Title: <input type="text" name="title" id="title" accept-charset="utf-8" size="75" value="" />
</p>
<p>
<input type="submit" name="submit" value="Submit" />
</p>
</form>
</body>
</html>
如您所见,我已在适当的地方使用 charset=utf8 对此进行了编码。我们接受包含变音符号的文本(例如,ñ、ó 等)。最后,我们在所有文本输入上运行一个小脚本来检查变音符号并将它们更改为 HTML 实体(例如,ñ 变为 ñ)。
当我的脚本接收到输入时,我首先必须执行 utf8_decode($input) 然后运行我的小脚本来检查并根据需要更改变音符号。一切正常。我很好奇为什么我必须在这个输入上运行解码。我了解 utf8_decode 将以 UTF-8 编码的字符串转换为 ISO-8859-1。我想确保——即使一切正常(或者我认为) ——我没有做一些以后会赶上我的古怪事情。例如,我正在发送 ISO-8859-1 编码字符以存储在我的数据库中,该数据库设置为存储/提供 UTF-8 字符。我应该对我的变音符号到实体脚本返回的字符串执行类似运行 utf8_encode() 的操作吗?例如:
$string = utf8_decode($string);
$search = explode(",","À,È,Ì,Ò,Ù,à,è,ì,ò,ù,Á,É,Í,Ó,Ú,Ý,á,é,í,ó,ú,ý,Â,Ê,Î,Ô,Û,â,ê,î,ô,û,Ã,Ñ,Õ,ã,ñ,õ,Ä,Ë,Ï,Ö,Ü,Ÿ,ä,ë,ï,ö,ü,ÿ,Å,å,Æ,æ,ß,Þ,þ,ç,Ç,Œ,œ,Ð,ð,Ø,ø,§,Š,š,µ,¢,£,¥,€,¤,ƒ,¡,¿");
$replace = explode(",","À,È,Ì,Ò,Ù,à,è,ì,ò,ù,Á,É,Í,Ó,Ú,Ý,á,é,í,ó,ú,ý,Â,Ê,Î,Ô,Û,â,ê,î,ô,û,Ã,Ntilde;,Õ,ã,ñ,õ,Ä,Ë,Ï,Ö,Ü,Ÿ,ä,ë,ï,ö,ü,ÿ,Å,å,Æ,æ,ß,Þ,þ,ç,Ç,Œ,œ,Ð,ð,Ø,ø,§,Š,š,µ¢,£,¥,€,¤,ƒ,¡,¿");
$new_input = str_replace($search, $replace, $string);
return utf8_encode($new_input); // right now i just return $new_input.
感谢任何人对此提供的任何见解。