PHP:使用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

我仍然不明白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]:
在中的输入字符串中检测到不完整的多字节字符

我对
$string=“&”一无所获

我需要两组不同的输出,将它们存储在数据库表中的两个不同列中

  • 我需要将
    Löic&Rene
    转换为
    Loic&Rene
    ,以实现干净的url

  • 我需要保持它们的原样-
    Löic&rene
    as
    Lö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));