为什么我无法在HTML中显示英镑符号 (£)?

42

我正在尝试在HTML(从PHP)中显示英镑符号,但是我得到的是一个带有问号的符号。

以下是我尝试过的内容。

在PHP中:

header('Content-type: text/html; charset=utf-8');
在HTML中,将此放置在head标签中:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

我尝试使用一个将其转换为以下形式的JavaScript函数来显示它:

&amp;#65533;

我想如果我知道我在做什么会更有帮助...但我猜这就是我为什么要问这个问题的原因 :)


27
仅返回翻译后的文本:最后一行加1 - Nick Craver
9
你尝试过使用 &pound; 吗?我可以为你解释一下,它是一个HTML实体编码,代表着英镑符号(£)。 - sje397
1
£ 可以工作,但我仍然想了解为什么它不起作用。我不知道这是否重要,但我是通过JavaScript(设置div标记的innerHTML属性)来完成这个操作的。 - Stephen Oberauer
8个回答

20

猜测:你在UTF-8编码的页面中有一个ISO-8859-1编码的英镑符号。

确保你的数据使用正确的编码,一切都会正常工作。


16

使用&#163;。我曾经遇到过同样的问题,解决方法是使用jQuery:

$(this).text('&amp;#163;');
  • 如果您尝试此方法无效,只需更改jQuery方法即可。
$(this).html('&amp;#163;');
  • 这在所有情况下都有效...

感谢您的编辑,我只是在很短的时间内非常快速地完成了它。重要的是,这个想法已经实现了。 - Ratch90

13

第一步:英镑符号是在UTF8编码中的一个“特殊”字符(尝试将£$保存在ISO-8859-1(或ISO-8859-15)文件中,使用标题进行编码时,您将得到ä)

第二步:将文件编码更改为UTF8编码。有很多方法可以做到这一点,例如notepad和notepad++等。

第三步:在输出任何内容之前,在PHP中使用ob_start();(如果出现奇怪的编码错误,比如有时会丢失编码)。是的,这就解决了!这种错误发生在页面被编码为Windows-1252(ANSI)、ASCII、ISO-8859-1(5)等,然后您又将所有其他内容编码为UTF8的情况下。这是一个可怕的错误,可能会导致session_start()无法正常工作。

第四步:其他PHP解决方案:

utf8_encode('£');
htmlentities('£');
echo '&amp;pound;';

第五步:JavaScript 解决方案:

document.getElementById('id_goes_here').innerText.replace('£','&amp;pound;');
document.getElementById('id_goes_here').innerText.replace('£',"\u00A3");
$(this).html().replace('£','&amp;pound;'); //jquery
$(this).html().replace('£',"\u00A3"); //jquery
String.fromCharCode('163');

您必须发送£,这样才能修复损坏的编码代码点。 请避免使用这些解决方案! 使用php! 这些解决方案仅显示如何“修复”错误,而最后一个则只创建了完好编码的字符。


11

你尝试过显示 &pound; 吗?

这里 有一个压倒性的列表。


2
虽然这样做可能会解决问题,但它并没有解决根本问题,因此我建议采用Pekka的答案。 - Andreas Bonini
£ 可以工作,但我仍然想了解为什么它不起作用。我不知道是否重要,但我是通过JavaScript(设置div标记的innerHTML属性)来完成这个操作的。 - Stephen Oberauer

3
您可以尝试使用&pound;&#163;代替直接嵌入字符;如果直接嵌入,您更容易遇到编码问题,在这些问题中,您的编辑器将文件保存为ISO-8859-1,但被解释为UTF-8,或反之亦然。
如果要直接嵌入它(或其他Unicode字符),请确保您实际上将文件保存为UTF-8,并像使用Content-Type标头时设置编码一样设置编码。确保从服务器获取文件时头部存在且正确,并且文件未被Web服务器转码。

2
或者尝试其他代码等价物:
&#163;
&pound;

1

你需要将你的PHP脚本文件保存为UTF-8编码,并在HTML中保留<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

对于文本编辑器,我推荐使用Notepad++,因为它可以检测和显示文件的实际编码(在编辑器的右下角),并且你也可以进行转换。


1
这适用于所有Chrome、IE和Firefox浏览器。
在数据库中 > 表 > 字段类型。例如,将符号列设置为varchar(2) utf8_bin。 PHP代码:
$symbol = '£';
echo mb_convert_encoding($symbol, 'UTF-8', 'HTML-ENTITIES');
or 
html_entity_decode($symbol, ENT_NOQUOTES, 'UTF-8');

并且确保将HTML或XML编码设置为encoding="UTF-8"

注意:您应确保数据库、文档类型和PHP代码都具有相同的编码

然而,更好的解决方案是使用&pound;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接