목차
回复讨论(解决方案)
백엔드 개발 PHP 튜토리얼 高手请进,无数高手完全弄不懂的编码问题.神奇的乱码

高手请进,无数高手完全弄不懂的编码问题.神奇的乱码

Jun 23, 2016 pm 01:55 PM
왜곡된 문자 코딩 주인

也就是此贴,http://bbs.csdn.net/topics/390807783?page=1#post-397542169

此贴有详细描述。解决此问题人可以得240分。这么个小问题,困扰二三天了,我已经从http底层看了数据包,依然无法解决。
-------------------------------------------------------------------------------------------
无数高手搞不定的(乱码)编码问题:只有在代码放入linux下用chrome访问时才乱码。其它任何情况正常。
windows下任何浏览器下无任何问题。
linux下。只有chrome访问出现乱码。(手工修改chrome编码当然可以正常显示了。)
-----------------------------------
http://parttime.wengege.com/h/login.html

响应编码居然为:gbk,utf-8.

HTTP/1.1 200 OK
Server: nginx/1.4.1
Date: Mon, 09 Jun 2014 15:28:28 GMT
Content-Type: text/html; charset=gbk,utf-8
Content-Length: 1843
Last-Modified: Mon, 09 Jun 2014 15:28:16 GMT
Connection: keep-alive
ETag: "5395d290-733"
Accept-Ranges: bytes

此/login.html内容用editplus打开看为utf-8.也已经另存为好几次为utf-8了。

是哪里让浏览器判断是gbk了呢?从而乱码?

-------------------------
引用 2 楼 changjay 的回复:
换一个编辑器试试,比如记事本或者emeditor之类的
我换了几个编辑器保存了。w3c检查里面有GBK字符。所以将utf-8识别为gbk了。真是奇怪了。无数次另存为转化过。

http://parttime.wengege.com/h/test.html
上面连接也是,在chrome下有乱码(JS引入时有乱码,奇怪的是其它部分乱码好了)。在ie下完全正常。
----------------------------------------------------
现在问题是:所有文件都检查过了(css,php,js),确定为utf-8编码。
有几个问题搞不定:
一、普通的html为utf-8编码。http响应居然为gbk,utf-8.所以出现乱码。问题是gbk哪来的?这三个字符哪来的?
我已经全站搜索GBK这三个字符。无获!!!
二、就算html偶尔成功后,但引入js还是乱码。指定引入编码为utf-8.

三、通过w3c烂网站检查,“成功识别”编码依然为 “gbk”. 然后w3c网站无数次崩溃。

真是神奇,检查结果说某行有问题。所有字符我从新打过,还是如此。换个目录的文件thinkphp3.1的登录还是正常。而thinkphp3.2下运行此html就是不正常。关键是这html和thinkphp毛关系都扯不上啊?


回复讨论(解决方案)

也许是apache的配置问题吧,记得apache配置中有字符集的设置的

又来了?
windows下任何浏览器下无任何问题。这话说的太武断!
这是 XP 360极速浏览器的截图


我不否认 IE 中为没有问题
这是因为 IE 有强大的字符集识别功能,完全可以忽视 Content-Type: text/html; charset 的影响
这就是网景倒闭的原因之一。
而那些在网景倒闭时公布的浏览器代码(10余兆c程序)基础上建立起来的各种浏览器,由于微软专利的原因,是无法解决这个问题的
当然这是题外话,不在讨论的序列中

你还是要找到在哪里会有 charset=gbk 的
不要过分相信工具软件,最好手工逐行查找。毕竟配置文件也就哪几个

但也不排除你而外安装了什么插件,造成了这种情况

此问题在我本机上完美重现
只要是login.html保存为utf-8编码无BOM,必定乱码。保存时保留BOM,侧无乱码。用UltraEdit反复测试多次,均如此。

关键是你以前的项目有没有这种情况!  如果没有那就是代码问题,如果也有,那可能是服务端问题、操作系统问题或者压根就是你代码输入的有错误(原先sql语句里错了一个字母,折腾一天,因为觉得自己不能犯小错误,实际上还是犯了!)

没什么实质性的东西,我的一点建议,主要是看看到底是代码原因,还是运行环境的原因!

此问题在我本机上完美重现
只要是login.html保存为utf-8编码无BOM,必定乱码。保存时保留BOM,侧无乱码。用UltraEdit反复测试多次,均如此。



怎么保留BOM 谢谢

检查一下nginx.conf配置文件?有没有gbk?

又来了?
windows下任何浏览器下无任何问题。这话说的太武断!
这是 XP 360极速浏览器的截图



xu大,我感觉楼主指的是windows上的服务器,既然换服务器没事,估计就是nginx哪里的配置或者模块干扰了吧?


此问题在我本机上完美重现
只要是login.html保存为utf-8编码无BOM,必定乱码。保存时保留BOM,侧无乱码。用UltraEdit反复测试多次,均如此。



怎么保留BOM 谢谢


用UltraEdit另存为,格式选 'UTF-8' 是保留,选 'UTF-8 -无BOM' 是不保留。 

不要干扰人家的判断

$url = 'http://parttime.wengege.com/h/login.html';$s = file_get_contents($url, false, null, 0, 10);//echo bin2hex($s); //3c21444f435459504520$url = 'http://parttime.wengege.com/h/test.html';$s = file_get_contents($url, false, null, 0, 10);echo bin2hex($s); //efbbbf3c21444f435459
로그인 후 복사

显然 
3c21444f435459504520 是没有 BOM 头的
efbbbf3c21444f435459 是有 BOM 头的

BOM 头对于浏览器而言,至多会影响到显示样式,而不会造成乱码

$url = 'http://parttime.wengege.com/Public/js/search.js';
$s = file_get_contents($url, false, null, 0, 10);
echo bin2hex($s); //2f2fe6a0b9e68daee7b1

/Public/js/search.js无BOM头

BOM 头对于浏览器而言,至多会影响到显示样式,而不会造成乱码

这可说不说,服务器返回是gbk,utf8这样的编码,如果没有BOM头来说明,是按gbk显示还是按utf8显示?明显这里是按gbk来显示的。

又来了?
windows下任何浏览器下无任何问题。这话说的太武断!
这是 XP 360极速浏览器的截图


我不否认 IE 中为没有问题
这是因为 IE 有强大的字符集识别功能,完全可以忽视 Content-Type: text/html; charset 的影响
这就是网景倒闭的原因之一。
而那些在网景倒闭时公布的浏览器代码(10余兆c程序)基础上建立起来的各种浏览器,由于微软专利的原因,是无法解决这个问题的
当然这是题外话,不在讨论的序列中

你还是要找到在哪里会有 charset=gbk 的
不要过分相信工具软件,最好手工逐行查找。毕竟配置文件也就哪几个

但也不排除你而外安装了什么插件,造成了这种情况



谢谢你版主。
我的意思是代码在windows下运访问不会有任何问题。
你看到的是在linux下运行的,就是有问题。

ob_start();
header("Content-Type: text/html; charset=gbk,utf8");
echo "测试文本";
ob_flush();
?>
保存为无BOM和有BOM,就会乱码和正常

检查一下nginx.conf配置文件?有没有gbk?


又来了?
windows下任何浏览器下无任何问题。这话说的太武断!
这是 XP 360极速浏览器的截图



xu大,我感觉楼主指的是windows上的服务器,既然换服务器没事,估计就是nginx哪里的配置或者模块干扰了吧?
是的,这位兄弟正解,版主大人,熬夜太多,水平是极高的,但精神恍惚,最近回复 我问题时,理解的和我说的恰好相反。
我讲了很多次是响应,xu大说是请求,还给我列了很例子。.... 我指的windows服务器。他说是windows下访问。我说gbk是自动生成的。他说gbk是我手工设置的。..... 正好和我相反。

也许是apache的配置问题吧,记得apache配置中有字符集的设置的



同样的ngnix配置下,其它项目都没有问题,差不多代码。

经测试,保存为utf-8 +bom 可以解决此问题。但原因何在呢?有人能够解释么?

header("Content-Type: text/html; charset=gbk,utf8");
是发出回应的头

get_headers(url) 
得到的 Content-Type: text/html; charset=gbk,utf8
是服务器的响应

我什么时候说过请求啦?
相应的头不是你设置的吗?放在配置文件里自动发出,也是你设置的

我一点都没搞混,而是你自己忙晕了!
你换了服务器就正常了,这恰恰表示了出问题的服务器的配置有问题!

以前的相同的代码,还有其它一些html代码,都是没有bom头的,也没有乱码。

关键是你以前的项目有没有这种情况!  如果没有那就是代码问题,如果也有,那可能是服务端问题、操作系统问题或者压根就是你代码输入的有错误(原先sql语句里错了一个字母,折腾一天,因为觉得自己不能犯小错误,实际上还是犯了!)

没什么实质性的东西,我的一点建议,主要是看看到底是代码原因,还是运行环境的原因!


以前没有这样情况

此问题在我本机上完美重现
只要是login.html保存为utf-8编码无BOM,必定乱码。保存时保留BOM,侧无乱码。用UltraEdit反复测试多次,均如此。



是啊,兄台找到结果了。但原因何在?这也是我想知道的问题。

其实谁也没有找到原因,只是观察到一些现象
 Content-Type: text/html; charset= gbk,utf8
这个 gbk 才是真正的原因,只不过你不肯需找他的来源罢了

为什么发出gbk,不在服务器上翻,估计谁也没法说出具体原因。

xuzuning版主正解!
问题原因找到,是nginx此网站配置时使用了charset gbk,utf-8 这样设置了。去掉gbk就ok了。所以乱码解决。
是我在thinkphp网站有一个网友和我碰到同样问题。提醒我上服务器上查看配置文件解决的。

header("Content-Type: text/html; charset=gbk,utf8");
是发出回应的头

get_headers(url) 
得到的 Content-Type: text/html; charset=gbk,utf8
是服务器的响应

我什么时候说过请求啦?
相应的头不是你设置的吗?放在配置文件里自动发出,也是你设置的

我一点都没搞混,而是你自己忙晕了!
你换了服务器就正常了,这恰恰表示了出问题的服务器的配置有问题!



谢谢!!!

当然,版主也同时提醒我看服务器上配置文件了。xu大,早点提醒我就好了。

如果是ngix charset ?置??,?甚???folder放就可以呢? ??folder??也是用同一?charset的。所以之前才想是不是有.htaccess影??前folder。就是因???,?我?有?得是default charset?置??。

你说你的文件确实保存的是UTF8,好像每个页面的mate标签是可以设置浏览的编码的,会不会是设置了GBK
或者是后台代码输出的字符是GBK?

你用的是cms么?是不是从gbk转成utf8的

其实我对php不熟悉,也只是猜测  猜测哈

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

잘못된 단어 페이지 번호를 해결하는 방법 잘못된 단어 페이지 번호를 해결하는 방법 Jun 25, 2023 pm 03:23 PM

잘못된 단어 페이지 번호에 대한 해결 방법: 1. 단어 문서를 열고 왼쪽 상단에 있는 "파일" 옵션을 클릭합니다. 2. "추가" 옵션을 선택한 다음 "옵션" 버튼을 클릭합니다. 4. "문서 내용 표시"에서 "필드 값 대신 필드 코드 표시"를 찾아 앞에 있는 확인 표시를 제거한 후 확인을 클릭하여 홈 페이지로 돌아갑니다.

Linux에서 중국어 왜곡 문자를 해결하는 방법 Linux에서 중국어 왜곡 문자를 해결하는 방법 Feb 21, 2024 am 10:48 AM

Linux 중국어 왜곡 문제는 중국어 문자 세트 및 인코딩을 사용할 때 흔히 발생하는 문제입니다. 잘못된 파일 인코딩 설정, 시스템 로케일이 설치 또는 설정되지 않음, 터미널 디스플레이 구성 오류 등으로 인해 문자가 깨질 수 있습니다. 이 문서에서는 몇 가지 일반적인 해결 방법을 소개하고 특정 코드 예제를 제공합니다. 1. 파일 인코딩 설정을 확인하십시오. 파일 인코딩을 보려면 터미널에서 file 명령을 사용하십시오. 출력에 "charset"이 있는 경우.

Tomcat 시작 잘못된 코드를 해결하는 방법 Tomcat 시작 잘못된 코드를 해결하는 방법 Dec 26, 2023 pm 05:21 PM

잘못된 Tomcat 시작에 대한 해결 방법: 1. Tomcat의 conf 구성 파일 수정 2. 명령줄 창 인코딩 수정 4. Tomcat 서버 구성 확인 6. 로그 확인 파일 7, 다른 해결 방법을 시도해 보세요. 자세한 소개: 1. Tomcat의 conf 구성 파일을 수정하고, Tomcat의 conf 디렉터리를 열고, "logging.properties" 파일을 찾습니다.

Windows 10에서 중국어 문자가 깨지는 문제를 해결하는 방법 Windows 10에서 중국어 문자가 깨지는 문제를 해결하는 방법 Jan 16, 2024 pm 02:21 PM

Windows 10 시스템에서는 잘못된 문자가 일반적입니다. 그 이유는 종종 운영 체제가 일부 문자 집합에 대해 기본 지원을 제공하지 않거나 문자 집합 옵션 설정에 오류가 있기 때문입니다. 올바른 약을 처방하기 위해 실제 수술 과정을 아래에서 자세히 분석해 보겠습니다. Windows 10 잘못된 코드를 해결하는 방법 1. 설정을 열고 "시간 및 언어"를 찾습니다. 2. 그런 다음 "언어"를 찾습니다. 3. "언어 설정 관리"를 찾습니다. 4. 여기에서 "시스템 지역 설정 변경"을 클릭합니다. 5. 표시된 대로 확인하고 클릭합니다. 그냥 확인하세요.

win11 시스템 문서의 문자 깨짐 문제를 해결하는 방법 win11 시스템 문서의 문자 깨짐 문제를 해결하는 방법 Jun 29, 2023 pm 06:29 PM

win11에서 텍스트 문서가 왜곡되는 문제를 해결하는 방법은 무엇입니까? 많은 사용자가 win11 시스템을 사용하면 텍스트 문서가 깨져서 정상적으로 읽을 수 없습니다. 많은 친구들이 이 문제를 해결하는 방법을 모릅니다. 사실 이 방법은 어렵지 않습니다. 아래에서 편집자는 Windows 11 시스템 문서가 왜곡된 문제를 해결하는 단계를 정리했습니다. 이것이 여러분에게 영감을 줄 수 있기를 바랍니다. 왜곡된 Windows 11 시스템 문서를 해결하는 단계: 1. 먼저 win11의 제어판을 열고 아래 검색 상자에 제어판을 입력한 후 검색을 클릭하여 제어판에 들어갑니다. 2. 패널 진입 후 시계와 지역을 찾아 클릭하여 진입한 후 지역 옵션을 클릭하세요. 3. 입력 후 관리 패널을 클릭한 후 시스템 지역 설정 변경을 클릭합니다.

dll 파일 열 때 문자 깨짐 문제 해결을 위한 편집 방법 dll 파일 열 때 문자 깨짐 문제 해결을 위한 편집 방법 Jan 06, 2024 pm 07:53 PM

많은 사용자가 컴퓨터를 사용할 때 접미사 dll이 포함된 파일이 많이 있지만 이러한 파일을 여는 방법을 모르는 사용자가 많다는 것을 알게 될 것입니다. 알고 싶은 사용자는 다음 세부 정보를 살펴보십시오. 튜토리얼~열기 방법 dll 파일 편집: 1. "exescope"라는 소프트웨어를 다운로드하여 설치합니다. 2. 그런 다음 dll 파일을 마우스 오른쪽 버튼으로 클릭하고 "exescope로 리소스 편집"을 선택합니다. 3. 그런 다음 팝업 오류 프롬프트 상자에서 "확인"을 클릭하십시오. 4. 그런 다음 오른쪽 패널에서 각 그룹 앞에 있는 "+" 기호를 클릭하면 해당 그룹에 포함된 콘텐츠를 볼 수 있습니다. 5. 보려는 dll 파일을 클릭한 다음 "파일"을 클릭하고 "내보내기"를 선택합니다. 6. 그러면 할 수 있다

win11 메모장에서 문자가 깨지는 문제 해결 win11 메모장에서 문자가 깨지는 문제 해결 Jan 05, 2024 pm 03:11 PM

일부 친구는 메모장을 열고 싶어하는데 win11 메모장이 깨져서 무엇을 해야 할지 모릅니다. 실제로 우리는 일반적으로 지역과 언어만 수정하면 됩니다. Win11 메모장이 깨졌습니다. 첫 번째 단계에서는 검색 기능을 사용하여 "제어판"을 검색하고 엽니다. 두 번째 단계에서는 시계 및 지역 아래에서 "날짜, 시간 또는 숫자 형식 변경"을 클릭합니다. 세 번째 단계에서는 카드 위의 "관리" 옵션을 클릭합니다. 네 번째 단계는 아래의 "시스템 지역 설정 변경"을 클릭하는 것입니다. 다섯 번째 단계는 현재 시스템 지역 설정을 "중국어(간체, 중국)"로 변경하고 "확인"을 클릭하여 저장하는 것입니다.

파일질라 문자 깨짐 해결 방법 파일질라 문자 깨짐 해결 방법 Nov 20, 2023 am 10:16 AM

filezilla 왜곡된 문자에 대한 해결 방법은 다음과 같습니다. 1. 인코딩 설정을 확인합니다. 3. 서버 구성을 확인합니다. 5. 소프트웨어 버전을 업데이트합니다. .기술 지원을 요청하세요. FileZilla 문자 ​​깨짐 문제를 해결하려면 여러 측면에서 시작하여 점차적으로 문제의 원인을 조사하고 해당 조치를 취하여 복구해야 합니다.

See all articles