我正在尝试更换字符串“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;
}
答案 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');