PHP:使用iconv处理特殊字符
我仍然不明白iconv是如何工作的 比如说,PHP:使用iconv处理特殊字符,php,special-characters,iconv,Php,Special Characters,Iconv,我仍然不明白iconv是如何工作的 比如说, $string = "Löic & René"; $output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string); 我知道 注意:iconv()[function.iconv]: 在输入中检测到非法字符 串入 $string=“Löic”或$string=“René” 我知道 注意:iconv()[function.iconv]:在中的输入字符串中检测到不完整的多字节字符 我对$stri
$string = "Löic & René";
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);
我知道
注意:iconv()[function.iconv]:
在输入中检测到非法字符
串入
$string=“Löic”
或$string=“René”代码>
我知道
注意:iconv()[function.iconv]:
在中的输入字符串中检测到不完整的多字节字符
我对$string=“&”一无所获代码>
我需要两组不同的输出,将它们存储在数据库表中的两个不同列中
我需要将Löic&Rene
转换为Loic&Rene
,以实现干净的url
我需要保持它们的原样-Löic&rene
asLöic&rene
然后只使用htmlentities($string,entu引号)转换它们代码>在我的html页面上显示它们时
我尝试了下面的一些建议,但仍然不起作用
我有一种情况,我需要一些字符的音译,但其他字符被忽略了(对于像ayn或hamza这样的奇怪的变音符号)。添加//translatit//IGNORE似乎对我起了作用。它把所有能被音译的东西都音译了,然后扔掉那些不能被音译的东西
因此:
还有一个,
Andries Seutens 07-Nov-2009 07:38
When doing transliteration, you have to make sure that your LC_COLLATE is properly set, otherwise the default POSIX will be used.
To transform "rené" into "rene" we could use the following code snippet:
setlocale(LC_CTYPE, 'nl_BE.utf8');
$string = 'rené';
$string = iconv('UTF-8', 'ASCII//TRANSLIT', $string);
echo $string; // outputs rene
我怎样才能真正算出呢
谢谢
编辑:
这是我测试代码的源文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" class="no-js">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<?php
$string = "Löic & René";
$output = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);
?>
</html>
您是否用UTF-8编码保存了源文件?如果没有(我猜您没有,因为这会产生“不完整的多字节字符”错误),那么请首先尝试。答案很可能是正确的(或者如果字符串不是源于/a文件,则无论源(db、http等)的字符集都不正确)数据。有一点是肯定的:输入不是utf-8。@wimvds:谢谢。我如何用utf-8编码保存源文件?请参阅上面的编辑-我的元中有utf-8-正确吗?@lauthiamkok:如果您仍在测试上面的示例,请使用一个好的编辑器/IDE来选择文件编码(即Windows上的记事本+,任何主要操作系统上的Eclipse/NetBeans)。对于网页输入,您应该使用元标记或相关的头调用(或者最好同时使用两者),并且在使用MySQL时,确保您也以UTF-8模式打开该页面(设置名称“UTF-8”
)@wimvds:我使用记事本+,我刚刚在utf-8中选择了文件编码-编码->编码。然后它在代码中显示了一些奇怪的东西-$string=“LE6ic”;我仍然有相同的错误消息…@lauthiamkok:这很正常,你应该使用编码菜单中的转换
选项,而不是编码
选项(哦,您应该选择不带BOM的UTF-8)如果您想更改已包含编码字符的文件的编码…您还可以在“设置”、“首选项”、“新文档/默认目录”中将新文件的NP++设置为默认UTF-8编码,以便在编辑新文件时不会忘记将编码切换为UTF-8。顺便说一句:您确实意识到ISO-8859-1中的e?除了不正确的输入字符集外,您可能还想将输出字符集更改为ASCII//translatit
。我对这些字符集感到非常困惑…谢谢!我不得不将一些韩语字符解码为UTF-8,这真是一件令人头痛的事情-最终,唯一有帮助的事情是:$converted=iconv('EUC-KR','UTF-8//TRANSLIT',$data);
+1,utf8\u encode()
单独使用对我来说效果很好,谢谢!请注意,utf8\u encode()
只会将ISO-8859-1转换为UTF-8伟大的代码片段。我在文件名转换中遇到了注意事项,这个解决方案出色地解决了我的问题。
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', utf8_encode($s));
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', utf8_encode($s));