我有一个php文档signup.php,它把表单中的内容保存到MySQL库中,当我想重新格式化输入内容时,问题就出现了,我想解码UTF-8字符,比如à-〉a。
$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šššš
但问题是,如你所见,是一样的!
8条答案
按热度按时间ifsvaxew1#
有一种更简单的方法可以做到这一点,使用
iconv
-从用户注解来看,这似乎是您想要做的:汉字音译对你的字符编码要非常认真,这样你就可以在整个过程中的所有阶段保持相同的编码--前端,表单提交,源文件编码。PHP和表单中的默认编码是ISO-8859-1,在PHP 5.4之前,它变成了UTF8(终于!)。
这里有两个函数,你可以尝试一下。第一个来自CakePHP的flector类,叫做
slug
:它依赖于
self::$_transliteration
数组,这与您在问题中所做的类似-您可以使用see the source for inflector on github。另一个是我个人使用的一个函数,它是comes from here。
这些函数所做的是从任意文本输入中音译和创建“slugs”,这是一个非常非常有用的东西,在制作Web应用程序时,你的工具箱中有。
qvk1mo1f2#
这里有一种方法,可以灵活地决定哪些应该被丢弃,哪些应该被替换,这就是我目前的做法。
$string = '某个带有垃圾的字符串';
myzjeezk3#
自PHP〉= 5.4.0起
d5vmydt94#
字符串$chain和数组中的字符采用了相同的字符编码,很有可能$first_name字符串采用了不同的编码,因此这些字符不匹配,你可以尝试使用多字节字符串函数。
尝试mb_convert_encoding。您可能还想尝试使用HTML_ENTITIES作为to_encoding参数,这样您就不必担心字符将如何转换-它将是非常可预测的。
假设您对这个脚本的输入是UTF-8格式,那么从这里开始可能不错...
x759pob25#
希望我能早点找到这个线程。我做的函数(花了我太长时间)如下:
1u4esq0p6#
简单函数。将字符串'ÁbÇÉfg'转换为'abc_efg'
a0x5cqrl7#
代码点火方式:
此函数使用一个配套配置文件
application/config/foreign_chars.php
来定义用于音译的to和from数组。https://www.codeigniter.com/user_guide/helpers/text_helper.html#ascii_to_entities
ldfqzlk88#