在PHP中获取“而不是撇号(')

时间:2010-02-18 20:33:56

标签: php utf-8 character-encoding mojibake

我尝试将文本转换为utf8或从utf8转换,这似乎没什么帮助。

我得到了:

"It’s Getting the Best of Me"

应该是:

"It’s Getting the Best of Me"

我从this url.

获取此数据

16 个答案:

答案 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网站遇到垃圾字符问题而来到这里,请试试这个:

  1. 打开wp-config.php

  2. 评论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("’", "&#39;", $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)

对于fopenfile_put_contents,这将有效:

str_replace("&rsquo;", "'", 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');