Php 单字节字符编码(ISO-8859-1)HTML文档中的两字节字符

Php 单字节字符编码(ISO-8859-1)HTML文档中的两字节字符,php,html,character-encoding,truetype,Php,Html,Character Encoding,Truetype,我了解到ISO-8859-1是一个单字节字符集 请参阅本页。它使用马来语 HTTP头和元标记表明它正在使用ISO-8859-1作为字符编码 但在本页中使用了两字节字符(0x201A)() (复制字符并在中查找) ¼ÈØOVA¢:ÜÍßÄí1.28。。。 如何在单字节编码中使用双字节字符 我并不想知道这一点。我的一项任务因不理解上述问题而受阻 更新:他们使用的字体是www.Manorama.com/portal/mmcss/Manorama.ttf,我认为Manaorama字体中的一些字符使

我了解到ISO-8859-1是一个单字节字符集

请参阅本页。它使用马来语

HTTP头和元标记表明它正在使用ISO-8859-1作为字符编码

但在本页中使用了两字节字符(0x201A)()

(复制字符并在中查找)


¼ÈØOVA¢:ÜÍßÄí1.28。。。
如何在单字节编码中使用双字节字符

我并不想知道这一点。我的一项任务因不理解上述问题而受阻

更新:他们使用的字体是www.Manorama.com/portal/mmcss/Manorama.ttf,我认为Manaorama字体中的一些字符使用了两个字节

更新2:我尝试使用下面的代码将文档从ISO-8859-1转换为UTF-8

<?php
$t = file_get_contents('http://www.manoramaonline.com/cgi-bin/MMOnline.dll/portal/ep/malayalamContentView.do?tabId=11&programId=1073753760&BV_ID=@@@&contentId=15238737&contentType=EDITORIAL&articleType=Malayalam%20News');

// Change the charset info in meta-tag
$t  = str_replace('ISO-8859-1', 'UTF-8', $t);

file_put_contents('t.html', utf8_encode($t));

即使页面在HTTP头中声明为ISO-8859-1编码,浏览器也会将其解释为Windows-1252编码。这是一个由来已久的传统,目前正在正式化,例如在

因此,当数据包含字节82(十六进制)时,它不是作为控制字符(根据ISO 8859-1),而是作为U+201A“,”(根据Windows-1252)

但是,该页面使用字体欺骗,根据特殊的内部非标准编码将代码位置映射到马来语字符。(如果禁用页面上的样式表,您可以看到这一点。所有文本都会变得乱七八糟。)该页面实际上并不包含U+201A““””,而是在字体中指定了马来语字符的字节82

因此,您需要按原样保留字节以获得相同的结果。转换为UTF-8将打破这一局面


如果要将数据转换为Unicode,则需要找出所使用字体的内部编码,并在字符级别执行该映射。

在这种情况下,我将研究此处指定的特定字体的使用
http://www.manoramaonline.com/portal/mmcss/mmFont.css
。。。字体:www.manoramanonline.com/portal/mmcss/Manorama。ttf@jtheman我看了看字体。他们对某些字母使用了双字节字符。您确定在访问该页面时编码仍处于
ISO-8859-1
状态吗因为大多数情况下,它会将它们打印为
标记。@MahanGM访问页面并检查HTTP头和元标记。两者都表明它是ISO-8859-1,您仍然可以对字符‚;伟大的你在这个问题上讲得更清楚了。让我看一下细节,找出解决我问题的办法。Kiitos!整个要点是,该文档不是在ISO-8859-1中,而是在windows-1252中。早些时候,我将其从ISO-8859-1转换为windows-1252。我浪费了几个小时来解决这个问题。现在问题解决了。我已经准备好将Manorama字体代码转换为Unicode代码的代码。这很好。问题是我得到的字符是0x82,但我的映射函数要求U+201A。我尝试从ISO-8859-1而不是windows-1252转换数据。
<?php
$t = file_get_contents('http://www.manoramaonline.com/cgi-bin/MMOnline.dll/portal/ep/malayalamContentView.do?tabId=11&programId=1073753760&BV_ID=@@@&contentId=15238737&contentType=EDITORIAL&articleType=Malayalam%20News');

// Change the charset info in meta-tag
$t  = str_replace('ISO-8859-1', 'UTF-8', $t);

file_put_contents('t.html', utf8_encode($t));