我尝试将文本转换为utf8或从utf8转换,这似乎没什么帮助。
我得到了:
"It’s Getting the Best of Me"
应该是:
"It’s Getting the Best of Me"
获取此数据
答案 0 :(得分:78)
转换为HTML实体:
<?php
echo mb_convert_encoding(
file_get_contents('http://www.tvrage.com/quickinfo.php?show=Surviver&ep=20x02&exact=0'),
"HTML-ENTITIES",
"UTF-8"
);
?>
有关更多编码选项,请参阅mb_convert_encoding的文档。
答案 1 :(得分:24)
确保您的html标头指定utf8
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
这通常对我有用(显然如果内容是utf8)。
如果设置了content-type,则无需转换为html实体。
答案 2 :(得分:12)
你的内容很好;问题出在服务器发送的标头上:
Connection:Keep-Alive
Content-Length:502
Content-Type:text/html
Date:Thu, 18 Feb 2010 20:45:32 GMT
Keep-Alive:timeout=1, max=25
Server:Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.7 with Suhosin-Patch
X-Powered-By:PHP/5.2.4-2ubuntu5.7
Content-Type应设置为Content-type: text/plain; charset=utf-8
,因为此页面不是HTML并使用utf-8编码。 Mac上的Chromium猜测ISO-8859-1并显示您正在描述的字符。
如果您无法控制网站,请将编码指定为UTF-8,以用于检索内容的任何功能。我对PHP不太熟悉,不知道究竟是怎么回事。
答案 3 :(得分:7)
我知道问题已得到解答,但设置元标记对我的情况没有帮助,所选答案也不够明确,所以我想提供更简单的答案。
所以为了简单起见,将字符串存储到变量中并像这样处理
$TVrageGiberish = "It’s Getting the Best of Me";
$notGiberish = mb_convert_encoding($TVrageGiberish, "HTML-ENTITIES", 'UTF-8');
echo $notGiberish;
哪个应该返回您想要的内容It’s Getting the Best of Me
如果要解析某些内容,则可以在为这样的变量赋值时执行转换,其中$TVrage
是包含所有值的数组,此示例中的XML来自具有标记“Title”的feed包含‘
或’
等特殊字符。
$cleanedTitle = mb_convert_encoding($TVrage->title, "HTML-ENTITIES", 'UTF-8');
答案 4 :(得分:5)
如果你因为在WordPress网站遇到垃圾字符问题而来到这里,请试试这个:
打开wp-config.php
评论define('DB_CHARSET', 'utf8')
和define('DB_COLLATE', '')
/** MySQL hostname */
define('DB_HOST', 'localhost');
/** Database Charset to use in creating database tables. */
//define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
//define('DB_COLLATE', '');
答案 5 :(得分:3)
听起来你在ISO 8859-1中不存在的UTF8字符(')上使用标准字符串函数。检查您是否使用Unicode compatible PHP设置和功能。另请参阅multibyte字符串函数。
答案 6 :(得分:2)
如果一切似乎都不起作用,这可能是您最好的解决方案。
<?php
$content="It’s Getting the Best of Me";
$content = str_replace("’", "'", $content);
echo $content;
?>
<强> ==或== 强>
<?php
$content="It’s Getting the Best of Me";
$content = str_replace("’", "'", $content);
echo $content;
?>
答案 7 :(得分:1)
我查看了链接,看起来像UTF-8给我。即,在Firefox中,如果选择View,Character Encoding,UTF-8,它将正确显示。
所以,你只需要弄清楚如何让你的PHP代码以UTF-8的形式处理它。祝你好运!
答案 8 :(得分:1)
试试这个:
html_entity_decode(mb_convert_encoding(stripslashes($text), "HTML-ENTITIES", 'UTF-8'))
答案 9 :(得分:1)
我们用另一个方向成功了:
mb_convert_encoding($text, "HTML-ENTITIES", "ISO-8859-1");
答案 10 :(得分:1)
试试这个
如果$text
包含奇怪的字符,请执行以下操作:
$mytext = mb_convert_encoding($text, "HTML-ENTITIES", 'UTF-8');
你完成了..
答案 11 :(得分:1)
对于fopen
和file_put_contents
,这将有效:
str_replace("’", "'", htmlspecialchars_decode(mb_convert_encoding($string_to_be_fixed, "HTML-ENTITIES", "UTF-8")));
答案 12 :(得分:1)
如果以上解决方案均无效:
就我而言,我注意到单引号是一种不同风格的单引号。而不是“我的数据有一个”。注意到单引号的区别了吗?所以我简单地写了一个 str_replace 来替换它并解决了这个问题。可能不是最优雅的解决方案,但它完成了工作。
$string= str_replace("’","'",$string);
答案 13 :(得分:0)
使用此
<meta http-equiv="Content-Type" content="text/html; charset=utf8_unicode_ci" />
而不是
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
答案 14 :(得分:0)
您应该检查编码编码的来源,然后尝试转换为正确的编码类型。
就我而言,我读取csv文件,然后导入到db。有些文件显示得很好,有些却没有。我检查了编码,发现带有ASCII编码的文件显示良好,而带有UTF-8的其他文件已损坏。因此,我使用以下代码来转换编码:
if(mb_detect_encoding($content) == 'UTF-8') {
$content = iconv("UTF-8", "ASCII//TRANSLIT", $content);
file_put_contents($file_path, $content);
} else {
$content = mb_convert_encoding($content, 'UTF-8', 'UTF-8');
file_put_contents($file_path, $content);
}
转换后,我将内容推送到文件,然后将其导入数据库,现在它在前端显示良好
答案 15 :(得分:0)
如果没有任何效果,请尝试使用mb_convert_encoding($ elem-> textContent,'UTF-8','utf8mb4');