【发布时间】:2012-04-26 12:42:47
【问题描述】:
我有 php 文档 signup.php,它将内容从表单(在 form.php 文档中)保存到 MySQL 库。当我想重新格式化输入内容时,问题就出现了。我想解码像 à->a 这样的 UTF-8 字符。
$first_name=$_POST['first_name'];
$last_name=$_POST['last_name'];
$course=$_POST['course'];
$chain="prêt-à-porter";
$pattern = array("'é'", "'è'", "'ë'", "'ê'", "'É'", "'È'", "'Ë'", "'Ê'", "'á'", "'à'", "'ä'", "'â'", "'å'", "'Á'", "'À'", "'Ä'", "'Â'", "'Å'", "'ó'", "'ò'", "'ö'", "'ô'", "'Ó'", "'Ò'", "'Ö'", "'Ô'", "'í'", "'ì'", "'ï'", "'î'", "'Í'", "'Ì'", "'Ï'", "'Î'", "'ú'", "'ù'", "'ü'", "'û'", "'Ú'", "'Ù'", "'Ü'", "'Û'", "'ý'", "'ÿ'", "'Ý'", "'ø'", "'Ø'", "'œ'", "'Œ'", "'Æ'", "'ç'", "'Ç'");
$replace = array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E', 'a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A', 'A', 'o', 'o', 'o', 'o', 'O', 'O', 'O', 'O', 'i', 'i', 'i', 'I', 'I', 'I', 'I', 'I', 'u', 'u', 'u', 'u', 'U', 'U', 'U', 'U', 'y', 'y', 'Y', 'o', 'O', 'a', 'A', 'A', 'c', 'C');
$chain = preg_replace($pattern, $replace, $chain);
echo $chain; // print pret-a-porter
$first_name = preg_replace($pattern, $replace, $first_name);
echo $first_name; // does not change the input!?!
为什么它对 $chain 非常有效,但对于 $first_name 或 $last_name 不起作用?
我也试试
echo $first_name; // print áááááábéééééébšššš
$trans = array("á" => "a", "é" => "e", "š" => "s");
echo strtr("áááááábéééééébšššš", $trans); // print aaaaaabeeeeeebssss
echo strtr($first_name,$trans); // print áááááábéééééébšššš
但正如您所见,问题是一样的!
【问题讨论】:
-
您的文件的编码是否正确? $_POST 中的内容是否具有相同的编码? (即您为浏览器设置的用于显示页面的那个?)您可能还想为 preg_replace 设置 unicode 标志
-
正如 phant0m 提到的,您需要密切关注所有编码。 POST 的默认编码是 ISO-8859-1,除非你明确告诉它你想要什么。 (accept-charset='UTF-8')
-
添加了几个示例函数:)
-
非常感谢您的帮助,当我在
标签: php utf-8 preg-replace decode