PHP:替换PHP上有趣的角色

时间:2010-10-15 08:14:09

标签: php string utf-8

我正在尝试更换字符串“Red Dwarf(电视连续剧1988-) - IMDb”到“Red Dwarf(电视连续剧1988') - IMDb”

我在数组中有这些有趣字符的翻译表。我尝试使用:str_replace替换它们但它不起作用。任何人都可以建议解决这个问题吗?这是代码的片段:

function replaceFunnyChar( $input ){

$translation = array(
    '’' => "'",
    "â€\"" => '-',
    'é' => 'é',
    'è' => 'è',
    '“' => '"',
    'â€' => '"',
    '‘' => "'",
    'â' => 'ã',
    'Ã"' => 'ä',
    'â€"' => '–',
    'Ä«' => 'ī',
    '阴' => '阴',
    'é™°' => '陰',
    "阳" => "阳",
    "陽" => "陽",
    '´' => "'",
    'ü' => 'ü',
    "Ã,Ã'" => "'",
    '•' => '–'
);


foreach( $translation as $find => $replace ){
    $output = str_replace($find, $replace, $input );    
    //$output = preg_replace("/" . $find . "/", $replace, $input );
}
return $output;
}

4 个答案:

答案 0 :(得分:2)

最好检测您拥有的数据的编码(如果您正在抓取,然后它在HTTP标头中,并被HTML中的元标记覆盖),那么您可以使用诸如Iconv之类的东西进行转换它:http://php.net/manual/en/book.iconv.php

如果您获得的数据是UTF-8,则实际上并不需要转换它。只需存储它并确保您的DBMS设置为支持UTF-8。然后,再次显示数据时,请确保在网页上指定UTF-8。

如果您使用Windows命令行来显示字符,则稍微复杂一点,因为Windows命令行不使用UTF-8。试试Ubuntu或Mac OS X.

此外,如果您已经拥有数据但无法再次下载,那么您需要确保如何显示字符 - 如果显示在网页上,那么Web浏览器可能会进一步搞乱字符,如果它使用了不同的编码比它应该的编码。您也可以将字节转出,并使用字节序列替换字符串,而不是原始代码中的带引号字符串。

答案 1 :(得分:0)

从我的头顶开始,这就是一个解码错误,你可以在你玩charsets一段时间之后摆脱它。

无论如何,你也可以将每个字符都放在ASCI 127上:

function _dropAsciOver127($entity){
    if(($asciCode = ord($entity[0])) > 127){
        return '';
     }else{
        return $entity[0];
     }
 }

$weird = 'Red Dwarf (TV Series 1988â€") - IMDb';
$cool = preg_replace_callback('/[^\w\d ]/i','_dropAsciOver127', $weird);
print $cool; // prints Red Dwarf (TV Series 1988") - IMDb

答案 2 :(得分:0)

我认为您的问题是您的问题,解决方案是将文档保存为文本编辑器中的UTF-8(白色BOM)。否则,您可以在页面中添加标题,可以这样做:

<强> HTML

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<强> PHP

header('Content-type: text/html; charset=utf-8');

请记住在页面顶部设置标题!如果您仍然遇到 charset 问题,请尝试将其从UTF-8更改为ISO或类似内容。

答案 3 :(得分:0)

确保这些事情......

1: Table Collation type is UTF-8

2: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

如果仍然没有做好,请在数据库中添加数据之前尝试此操作

mysql_set_charset('utf8');