백엔드 개발 PHP 튜토리얼 PHP를 사용하여 유니코드를 UTF-8로 변환

PHP를 사용하여 유니코드를 UTF-8로 변환

Aug 08, 2016 am 09:25 AM
iconv name substr unicode

function unescape($str) { $str = rawurldecode($str);

<code> preg_match_all(<span>"/(?:<span>%u</span>.{4})|&#x.{4};|&#\d+;|.+/U"</span>,<span>$str</span>,<span>$r</span>); <span>$ar</span> = <span>$r</span>[<span>0</span>]; <span>//print</span>_r(<span>$ar</span>); <span>foreach</span>(<span>$ar</span> as <span>$k</span>=><span>$v</span>) { <span>if</span>(<span>substr</span>(<span>$v</span>,<span>0</span>,<span>2</span>) == <span>"<span>%u</span>"</span>){ <span>$ar</span>[<span>$k</span>] = iconv(<span>"UCS-2BE"</span>,<span>"UTF-8"</span>,<span>pack</span>(<span>"H4"</span>,<span>substr</span>(<span>$v</span>,-<span>4</span>)));
  }
        elseif(<span>substr</span>(<span>$v</span>,<span>0</span>,<span>3</span>) == <span>"&#x"</span>){ <span>$ar</span>[<span>$k</span>] = iconv(<span>"UCS-2BE"</span>,<span>"UTF-8"</span>,<span>pack</span>(<span>"H4"</span>,<span>substr</span>(<span>$v</span>,<span>3</span>,-<span>1</span>)));
  }
        elseif(<span>substr</span>(<span>$v</span>,<span>0</span>,<span>2</span>) == <span>"&#"</span>) { <span>$ar</span>[<span>$k</span>] = iconv(<span>"UCS-2BE"</span>,<span>"UTF-8"</span>,<span>pack</span>(<span>"n"</span>,<span>substr</span>(<span>$v</span>,<span>2</span>,-<span>1</span>)));
        }
    } <span>return</span><span>join</span>(<span>""</span>,<span>$ar</span>);
}
echo unescape(<span>"紫星蓝"</span>);</code>
로그인 후 복사

今天有用户反馈,表单系统用户提交的数据中文会乱码。测试发现问题出在 iconv 转换上。
iconv(‘UCS-2’, ‘GBK’, ‘中文’)
Google 搜索发现,原因是 Linux 服务器上 UCS-2 编码方式与 Winodws 不一致。
于是,我改成 iconv(‘UCS-2BE’, ‘GBK’, ‘中文’) 试试,中文正常了

以下是有关两个平台 UCS-2 编码的潜规则:

1, UCS-2 不等于 UTF-16。 UTF-16 每个字节使用 ASCII 字符范围编码,而 UCS-2 对每个字节的编码可以超出 ASCII 字符范围。UCS-2 和 UTF-16 对每个字符至多占两个字节,但是他们的编码是不一样的。

2, 对于 UCS-2, windows 下默认是 UCS-2LE。用 MultibyteToWidechar(或者A2W)生成的是 UCS-2LE 的 unicode。windows记事本可以将文本保存为 UCS-2BE,相当于多了层转换。

3, 对于 UCS-2, linux 下默认是 UCS-2BE。用iconv(指定UCS-2)来转换生成的是 UCS-2BE 的 unicode。如果转换windows平台过来的 UCS-2, 需要指定 UCS-2LE。

4, 鉴于windows和linux等多个平台对 UCS-2 的理解不同(UCS-2LE,UCS-2BE)。MS 主张 unicode 有个引导标志(UCS-2LE FFFE, UCS-2BE FEFF),以表明下面的字符是 unicode 并且判别 big-endian 或 little-endian。 所以从 windows 平台过来的数据发现有这个前缀,不用慌张。

5, linux 的编码输出,比如从文件输出,从 printf 输出,需要控制台做适当的编码匹配(如果编码不匹配,一般和该程序编译时的编码有若干关系),而控制台的转换输入需要查看当前的系统编码。比如控制台当前的编码是 UTF-8, 那么 UTF-8 编码的东西能正确显示,GBK 就不能;同样,当前编码是 GBK, 就能显示 GBK 编码,后来的系统应该更智能的处理好更多的转换了。不过通过 putty 等终端还是需要设置好终端的编码转换以解除乱码的烦恼。

PHP中对汉字进行UNICODE编码和解码的实现

<code><span>//将内容进行UNICODE编码</span><span><span>function</span><span>unicode_encode</span><span>(<span>$name</span>)</span> {</span><span>$name</span> = iconv(<span>'UTF-8'</span>, <span>'UCS-2'</span>, <span>$name</span>); <span>$len</span> = strlen(<span>$name</span>); <span>$str</span> = <span>''</span>; <span>for</span> (<span>$i</span> = <span>0</span>; <span>$i</span> < <span>$len</span> - <span>1</span>; <span>$i</span> = <span>$i</span> + <span>2</span>)
    { <span>$c</span> = <span>$name</span>[<span>$i</span>]; <span>$c2</span> = <span>$name</span>[<span>$i</span> + <span>1</span>]; <span>if</span> (ord(<span>$c</span>) > <span>0</span>)
        { <span>// 两个字节的文字</span><span>$str</span> .= <span>'\u'</span>.base_convert(ord(<span>$c</span>), <span>10</span>, <span>16</span>).base_convert(ord(<span>$c2</span>), <span>10</span>, <span>16</span>);
        } <span>else</span> { <span>$str</span> .= <span>$c2</span>;
        }
    } <span>return</span><span>$str</span>;
} <span>$name</span> = <span>'MY,你大爷的'</span>; <span>$unicode_name</span>=unicode_encode(<span>$name</span>); <span>echo</span><span>'<h3>'</span>.<span>$unicode_name</span>.<span>'</h3>'</span>; <span>// 将UNICODE编码后的内容进行解码</span><span><span>function</span><span>unicode_decode</span><span>(<span>$name</span>)</span> {</span><span>// 转换编码,将Unicode编码转换成可以浏览的utf-8编码</span><span>$pattern</span> = <span>'/([\w]+)|(\\\u([\w]{4}))/i'</span>;
    preg_match_all(<span>$pattern</span>, <span>$name</span>, <span>$matches</span>); <span>if</span> (!<span>empty</span>(<span>$matches</span>))
    { <span>$name</span> = <span>''</span>; <span>for</span> (<span>$j</span> = <span>0</span>; <span>$j</span> < count(<span>$matches</span>[<span>0</span>]); <span>$j</span>++)
        { <span>$str</span> = <span>$matches</span>[<span>0</span>][<span>$j</span>]; <span>if</span> (strpos(<span>$str</span>, <span>'\\u'</span>) === <span>0</span>)
            { <span>$code</span> = base_convert(substr(<span>$str</span>, <span>2</span>, <span>2</span>), <span>16</span>, <span>10</span>); <span>$code2</span> = base_convert(substr(<span>$str</span>, <span>4</span>), <span>16</span>, <span>10</span>); <span>$c</span> = chr(<span>$code</span>).chr(<span>$code2</span>); <span>$c</span> = iconv(<span>'UCS-2'</span>, <span>'UTF-8'</span>, <span>$c</span>); <span>$name</span> .= <span>$c</span>;
            } <span>else</span> { <span>$name</span> .= <span>$str</span>;
            }
        }
    } <span>return</span><span>$name</span>;
} <span>echo</span><span>'MY,\u4f60\u5927\u7237\u7684 -> '.unicode_decode(<span>$unicode_name</span>);</code>
로그인 후 복사

以上就介绍了用PHP将Unicode 转化为UTF-8,包括了方面的内容,希望对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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

중국어 처리에 꼭 필요한 추천 기능 : PHP iconv 기능 상세 설명 중국어 처리에 꼭 필요한 추천 기능 : PHP iconv 기능 상세 설명 Jun 27, 2023 pm 02:04 PM

텍스트를 처리하는 동안 문자열을 다양한 인코딩 형식으로 변환하는 것은 일반적인 요구 사항입니다. PHP 언어에서 제공되는 iconv(InternationalizationConversion) 기능은 이러한 요구를 매우 편리하게 충족할 수 있습니다. 이 기사에서는 다음 측면에서 iconv 함수의 사용법을 자세히 소개합니다. iconv 함수 정의 및 공통 매개변수 소개 데모 예시: GBK 인코딩 문자열을 UTF-8 인코딩 문자열로 변환 예시 데모: UTF 변환

PHP에 대한 심층적인 이해: JSON 유니코드를 중국어로 변환하는 구현 방법 PHP에 대한 심층적인 이해: JSON 유니코드를 중국어로 변환하는 구현 방법 Mar 05, 2024 pm 02:48 PM

PHP에 대한 심층적인 이해: JSONUnicode를 중국어로 변환하는 구현 방법 개발 중에 JSON 데이터를 처리해야 하는 상황이 자주 발생하며, JSON의 유니코드 인코딩은 일부 시나리오, 특히 변환해야 할 때 몇 가지 문제를 일으킬 수 있습니다. 유니코드 인코딩을 한자로 변환하는 경우입니다. PHP에는 이러한 변환 프로세스를 달성하는 데 도움이 되는 몇 가지 방법이 아래에 소개되고 구체적인 코드 예제가 제공됩니다. 먼저 JSON의 Un을 먼저 이해해 봅시다.

유니코드를 중국어로 변환하는 방법 유니코드를 중국어로 변환하는 방법 Dec 14, 2023 am 10:57 AM

유니코드는 다양한 언어와 기호를 표현하는 데 사용되는 문자 인코딩 표준입니다. 유니코드 인코딩을 중국어 문자로 변환하려면 Python의 내장 함수 chr() 및 ord()를 사용할 수 있습니다.

Eclipse에서 한자 깨짐 문제를 해결하는 방법을 시도해 보세요. Eclipse에서 한자 깨짐 문제를 해결하는 방법을 시도해 보세요. Jan 03, 2024 pm 05:28 PM

Eclipse에서 중국어 문자가 깨져서 고민이신가요? 이러한 솔루션을 시도하려면 구체적인 코드 예제가 필요합니다. 1. 배경 소개 컴퓨터 기술이 지속적으로 발전함에 따라 소프트웨어 개발에서 중국어의 역할이 점점 더 중요해지고 있습니다. 그러나 많은 개발자는 중국어 개발에 Eclipse를 사용할 때 잘못된 코드 문제에 직면하여 작업 효율성에 영향을 미칩니다. 그런 다음 이 기사에서는 몇 가지 일반적인 잘못된 코드 문제를 소개하고 독자가 Eclipse에서 중국어 잘못된 코드 문제를 해결하는 데 도움이 되는 해당 솔루션과 코드 예제를 제공합니다. 2. 일반적인 잘못된 코드 문제 및 솔루션 파일

PHP는 문자열의 첫 번째 문자의 ASCII 값을 반환합니다. PHP는 문자열의 첫 번째 문자의 ASCII 값을 반환합니다. Mar 21, 2024 am 11:01 AM

이 글에서는 PHP가 반환하는 문자열의 첫 번째 문자의 ASCII 값에 대해 자세히 설명할 것입니다. 편집자는 이것이 매우 실용적이라고 생각하므로 이 글을 읽으신 후 뭔가를 얻으실 수 있기를 바랍니다. PHP는 문자열의 첫 번째 문자에 대한 ASCII 값을 반환합니다. 소개 PHP에서 문자열의 첫 번째 문자에 대한 ASCII 값을 얻는 것은 문자열 처리 및 문자 인코딩에 대한 기본 지식이 필요한 일반적인 작업입니다. ASCII 값은 컴퓨터 시스템에서 문자의 숫자 값을 나타내는 데 사용되며 문자 비교, 데이터 전송 및 저장에 중요합니다. 문자열의 첫 번째 문자에 대한 ASCII 값을 가져오는 프로세스에는 다음 단계가 포함됩니다. 문자열 가져오기: ASCII 값을 가져오려는 문자열을 결정합니다. 변수 또는 문자열 상수일 수 있습니다.

PHP 튜토리얼: JSON 유니코드를 한자로 변환하는 방법 PHP 튜토리얼: JSON 유니코드를 한자로 변환하는 방법 Mar 05, 2024 pm 06:36 PM

JSON(JavaScriptObjectNotation)은 웹 애플리케이션 간의 데이터 교환에 일반적으로 사용되는 경량 데이터 교환 형식입니다. JSON 데이터를 처리할 때 유니코드로 인코딩된 중국어 문자(예: "u4e2du6587")를 자주 접하고 이를 읽을 수 있는 중국어 문자로 변환해야 합니다. PHP에서는 몇 가지 간단한 방법을 통해 이러한 변환을 수행할 수 있습니다. 다음으로 JSONUnico 변환 방법을 자세히 소개하겠습니다.

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

PHP는 다른 문자열에 있는 문자열의 시작 위치부터 끝 ​​위치까지 문자열을 반환합니다. PHP는 다른 문자열에 있는 문자열의 시작 위치부터 끝 ​​위치까지 문자열을 반환합니다. Mar 21, 2024 am 10:31 AM

이 글은 PHP가 다른 문자열에서 문자열의 시작 위치부터 끝 ​​위치까지 문자열을 반환하는 방법을 자세히 설명합니다. 편집자는 이것이 꽤 실용적이라고 생각하므로 참고용으로 공유하겠습니다. 이 기사에서 뭔가를 얻을 수 있습니다. PHP에서 substr() 함수를 사용하여 문자열에서 부분 문자열을 추출합니다. substr() 함수는 문자열에서 지정된 범위 내의 문자를 추출할 수 있습니다. 구문은 다음과 같습니다. substr(string,start,length) 여기서: string: 하위 문자열을 추출할 원래 문자열입니다. start: 하위 문자열의 시작 위치에 대한 인덱스입니다(0부터 시작). 길이(선택 사항): 하위 문자열의 길이입니다. 지정하지 않은 경우

See all articles