php中常见编码问题
php中常见编码问题
PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码, 中国的 GB2312-80,日本的 JIS 等。作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用。字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类。早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage 等概念。但是由于各个本地字符集代码范围重叠,相互间信息交换困难;软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来,作一致处理,将特别的本地化处理内容降低到最少。这也就是所谓的国际化(118N)。各种语言信息被进一步规范为 Locale 信息。处理的底层字符集变成了几乎包含了所有字形的 Unicode。
现在大部分具有国际化特征的软件核心字符处理都是以 Unicode 为基础的,在软件运行时根据当时的ocale/Lang/Codepage 设置确定相应的本地字符编码设置,并依此处理本地字符。在处理过程中需要实现 Unicode 和本地字符集的相互转换,甚或以 Unicode 为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。
数据库中的字符集编码问题
流行的关系数据库系统都支持数据库字符集编码,也就是说在创建数据库时可以指定它自己的字符集设置,数据库的数据以指定的编码形式存储。当应用程序访问数据时,在入口和出口处都会有字符集编码的转换。对于中文数据,数据库字符编码的设置应当保证数据的完整性。GB2312、GBK、UTF-8 等都是可选的数据库字符集编码;当然我们也可以选择 ISO8859-1 (8-bit),只是我们得在应
用程序写数据之前先将 16Bit 的一个汉字或 Unicode 拆分成两个 8-bit 的字符,读数据之后也需要将两个字节合并起来,同时还要判别其中的 SBCS 字符,因此我们并不推荐采用 ISO8859-1 作为数据库字符集编码。这样不但没有充分利用数据库自身的字符集编码支持,而且同时也增加了编程的复杂度。编程时,可以先用数据库管理系统提供的管理功能检查其中的中文数据是否正确。
PHP 程序在查询数据库之前,首先执行 mysql_query("SET NAMES xxxx"); 其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,几乎所有 WEB 程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入 mysql_query("SET NAMES xxxx") 就可以了。
SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8' 语句告诉服务器“将来从这个客户端传来的信息采用字符集 utf-8”。它还为服务器发送回客户端的结果指定了字符集(例如,如果你使用一个 SELECT 语句,它表示列值使用了什么字符集)。
定位问题时常用的技巧
定位中文编码问题通常采用最笨的也是最有效的办法―在你认为有嫌疑的程序处理后打印字符串的内码。通过打印字符串的内码,你可以发现什么时候中文字符被转换成 Unicode,什么时候Unicode 被转回中文内码,什么时候一个中文字成了两个 Unicode 字符,什么时候中文字符串被转成了一串问号,什么时候中文字符串的高位被截掉了……
取用合适的样本字符串也有助于区分问题的类型。如:"aa啊 aa?@aa" 等中英相间,GB、GBK特征字符均有的字符串。一般来说,英文字符无论怎么转换或处理,都不会失真(如果遇到了,可以尝试着增加连续的英文字母长度)。
解决各种应用的乱码问题
1) 使用 标签设置页面编码
这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管 xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。
请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。
2) header("content-type:text/html; charset=xxx");
这个函数 header() 的作用是把括号里面的信息发到 http 标头。如果括号里面的内容为文中所说那样,那作用和 标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的 xxx 编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说 http 标头和 HTML信息的差别了:
http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。而 标签是属于 HTML 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)。假如一个 php 页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者 http 标头而不认 meta 了。当然这个函数只能在 php 页面内使用。
同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache 的原因了。
3) AddDefaultCharset
Apache 根目录的 conf 文件夹里,有整个 Apache 的配置文档 httpd.conf。
用文本编辑器打开 httpd.conf,第 708 行(不同版本可能不同)有 AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http 标头里的字符集为你默认的 xxx字符集。有这行,就相当于给每个文件都加了一行 header("content-type:text/html; charset=xxx")。这下就明白为什么明明 设置了是 utf-8,可浏览器始终采用 gb2312 的原因。
如果网页里有 header("content-type:text/html; charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把 AddDefaultCharset xxx 前面加个"#",注释掉这句,而且页面里不含 header("content-type…"),那这个时候就轮到 meta 标签起作用了。
下面列出以上的优先顺序:
.. header("content-type:text/html; charset=xxx")
.. AddDefaultCharset xxx
..
如果你是 web 程序员,建议给你的每个页面都加个header("content-type:text/html;charset=xxx"),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。
4) php.ini 中的 default_charset 配置:
php.ini 中的 default_charset = "gb2312" 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。
结束语
其实 php 开发中的中文编码并没有想像的那么复杂,虽然定位和解决问题没有定规,各种运行环境也各不尽然,但后面的原理是一样的。了解字符集的知识是解决字符问题的基础。不过,随着中文字符集的变化,不仅仅是 php 编程,中文信息处理中的问题还是会存在一段时间的。

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











기계 학습 알고리즘은 숫자 입력만 허용하므로 범주형 특성을 발견하면 범주형 특성을 인코딩합니다. 이 문서에서는 11가지 일반적인 범주형 변수 인코딩 방법을 요약합니다. 1. ONE HOT ENCODING 가장 널리 사용되고 일반적으로 사용되는 인코딩 방법은 One Hot Encoding입니다. n개의 관측값과 d개의 개별 값을 갖는 단일 변수는 n개의 관측값을 갖는 d개의 이진 변수로 변환되며, 각 이진 변수는 비트(0, 1)로 식별됩니다. 예를 들어, 인코딩 후 가장 간단한 구현은 pandas' get_dummiesnew_df=pd.get_dummies(columns=['Sex'], data=df)2를 사용하는 것입니다.

UTF8로 인코딩된 한자는 3바이트를 차지합니다. UTF-8 인코딩에서는 한자 1개가 3바이트이고, 중국어 구두점 1개가 3바이트를 차지하는 반면, 유니코드 인코딩에서는 한자 1개(중국어 번체 포함)가 2바이트에 해당합니다. UTF-8은 각 문자를 인코딩하는 데 1~4바이트를 사용합니다. 하나의 US-ASCIl 문자는 인코딩하는 데 1바이트만 필요합니다. 발음 구별 부호가 있는 라틴어, 그리스어, 아르메니아어 및 기타 문자는 2바이트가 필요합니다. 부호화.

LLM(대형 언어 모델)은 매끄럽고 일관된 텍스트를 생성하는 기능을 갖추고 있어 인공 지능 대화 및 창의적 글쓰기와 같은 영역에 새로운 전망을 제시합니다. 그러나 LLM에는 몇 가지 주요 제한 사항도 있습니다. 첫째, 그들의 지식은 훈련 데이터에서 인식된 패턴으로 제한되어 있으며 세상에 대한 진정한 이해가 부족합니다. 둘째, 추론 능력이 제한되어 있어 여러 데이터 소스에서 논리적 추론을 하거나 사실을 융합할 수 없습니다. 더 복잡하고 개방형 질문에 직면할 때 LLM의 답변은 "환상"이라고 알려진 터무니없거나 모순될 수 있습니다. 따라서 LLM은 일부 측면에서 매우 유용하지만 복잡한 문제와 실제 상황을 처리할 때 여전히 특정 제한 사항이 있습니다. 이러한 격차를 해소하기 위해 최근 몇 년 동안 검색 증강 생성(RAG) 시스템이 등장했습니다.

일반적인 인코딩 방법에는 ASCII 인코딩, 유니코드 인코딩, UTF-8 인코딩, UTF-16 인코딩, GBK 인코딩 등이 포함됩니다. 자세한 소개: 1. ASCII 인코딩은 7비트 이진수를 사용하여 영어 문자, 숫자, 구두점, 제어 문자 등을 포함하여 128개의 문자를 나타내는 최초의 문자 인코딩 표준입니다. 2. 유니코드 인코딩은 표현하는 데 사용되는 방법입니다. 세상의 모든 문자 각 문자에 고유한 디지털 코드 포인트를 할당하는 문자의 표준 인코딩 방법 3. UTF-8 인코딩 등

PHP 코딩 팁: 위조 방지 검증 기능이 있는 QR 코드를 생성하는 방법은 무엇입니까? 전자상거래와 인터넷의 발달로 다양한 산업분야에서 QR코드의 활용이 늘어나고 있습니다. QR코드를 사용하는 과정에서 제품의 안전성 확보와 위조방지를 위해서는 QR코드에 위조방지 검증기능을 추가하는 것이 매우 중요합니다. 이 기사에서는 PHP를 사용하여 위조 방지 검증 기능이 포함된 QR 코드를 생성하는 방법을 소개하고 해당 코드 예제를 첨부합니다. 시작하기 전에 다음과 같은 필수 도구와 라이브러리를 준비해야 합니다: PHPQRCode: PHP

PHP는 동적 웹 페이지와 애플리케이션을 작성하는 데 사용할 수 있는 널리 사용되는 웹 프로그래밍 언어입니다. 실제 애플리케이션에서 PHP는 데이터를 쿼리하고 처리하기 위해 데이터베이스와 상호 작용해야 하는 경우가 많습니다. 그러나 PHP를 사용하여 데이터베이스에서 결과를 얻을 때 인코딩 문제가 발생할 수 있으며, 이로 인해 종종 문자가 깨집니다. 그렇다면 PHP 데이터베이스 쿼리 결과 인코딩 문제를 해결하는 방법은 무엇입니까?

코딩 규칙은 다음과 같습니다. 1. 이전 코드가 0이고 현재 데이터 비트가 0이면 코드는 0입니다. 이전 코드가 0이고 현재 데이터 비트가 1이면 코드는 양극성 펄스(+A)입니다. 또는 - A), 카운터는 1만큼 증가합니다. 이전 코드가 1이고 현재 데이터 비트가 1이면 코드는 0이고 카운터는 4만큼 증가합니다. 1이면 현재 데이터 비트는 0이고, 카운터의 패리티에 따라 인코딩 방법이 결정됩니다. 짝수인 경우 인코딩은 (+B 또는 -B)입니다. 레벨이 0이고 카운터가 지워지는 식입니다.

안녕하세요 여러분, 제 이름은 루가입니다. 오늘은 인공지능(AI) 생태분야 분야인 GenAI와 관련된 기술에 대해 이야기해보겠습니다. 급속한 기술 혁신과 차별화된 비즈니스 시나리오라는 과제에 직면하면서 전통적인 코딩 방법은 적응되기 시작했으며 증가하는 요구에 완전히 대처할 수 없습니다. 동시에 신흥 범용 GenAI(인공지능 기술)는 이러한 수요를 충족할 수 있는 큰 잠재력을 가지고 있습니다. GenAI는 인공지능 기술의 대표주자로서 강력한 잠재력과 능력을 바탕으로 각계에서 널리 활용되기 시작했습니다. 다양한 시나리오의 코딩 요구 사항을 자동으로 학습하고 적응할 수 있어 코딩 효율성과 품질이 크게 향상됩니다. 딥러닝과 모델 최적화를 통해 GenAI는 다양한 정보를 정확하게 이해할 수 있습니다.
