目次
php字符串处理之全角半角转换,php字符串全角半角
ホームページ php教程 php手册 php字符串处理之全角半角转换,php字符串全角半角

php字符串处理之全角半角转换,php字符串全角半角

Jun 13, 2016 am 08:45 AM
半角

php字符串处理之全角半角转换,php字符串全角半角

半角全角的处理是字符串处理的常见问题,本文尝试为大家提供一个思路。

一、概念

全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E)
半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E)
空格比较特殊,全角为 12288(0x3000),半角为 32 (0x20)
而且除空格外,全角/半角按unicode编码排序在顺序上是对应的
所以可以直接通过用+-法来处理非空格数据,对空格单独处理

二、实现思路

1. 找到目标unicode的字符,可以使用正则表达式解决

2. 修改unicode编码

三、实现

1. 首先是两个unicode与字符的转换函数:

<span> 1</span>     <span>/*</span><span>*
</span><span> 2</span> <span>     * 将unicode转换成字符
</span><span> 3</span> <span>     * @param int $unicode
</span><span> 4</span> <span>     * @return string UTF-8字符
</span><span> 5</span> <span>     *</span><span>*/</span>
<span> 6</span>     <span>function</span> unicode2Char(<span>$unicode</span><span>){
</span><span> 7</span>         <span>if</span>(<span>$unicode</span> < 128)     <span>return</span> <span>chr</span>(<span>$unicode</span><span>);
</span><span> 8</span>         <span>if</span>(<span>$unicode</span> < 2048)    <span>return</span> <span>chr</span>((<span>$unicode</span> >> 6) + 192) .
<span> 9</span>                                       <span>chr</span>((<span>$unicode</span> & 63) + 128<span>);
</span><span>10</span>         <span>if</span>(<span>$unicode</span> < 65536)   <span>return</span> <span>chr</span>((<span>$unicode</span> >> 12) + 224) .
<span>11</span>                                       <span>chr</span>(((<span>$unicode</span> >> 6) & 63) + 128) .
<span>12</span>                                       <span>chr</span>((<span>$unicode</span> & 63) + 128<span>);
</span><span>13</span>         <span>if</span>(<span>$unicode</span> < 2097152) <span>return</span> <span>chr</span>((<span>$unicode</span> >> 18) + 240) .
<span>14</span>                                       <span>chr</span>(((<span>$unicode</span> >> 12) & 63) + 128) .
<span>15</span>                                       <span>chr</span>(((<span>$unicode</span> >> 6) & 63) + 128) .
<span>16</span>                                       <span>chr</span>((<span>$unicode</span> & 63) + 128<span>);
</span><span>17</span>         <span>return</span> <span>false</span><span>;
</span><span>18</span> <span>    }
</span><span>19</span>  
<span>20</span>     <span>/*</span><span>*
</span><span>21</span> <span>     * 将字符转换成unicode
</span><span>22</span> <span>     * @param string $char 必须是UTF-8字符
</span><span>23</span> <span>     * @return int
</span><span>24</span> <span>     *</span><span>*/</span>
<span>25</span>     <span>function</span> char2Unicode(<span>$char</span><span>){
</span><span>26</span>         <span>switch</span> (<span>strlen</span>(<span>$char</span><span>)){
</span><span>27</span>             <span>case</span> 1 : <span>return</span> <span>ord</span>(<span>$char</span><span>);
</span><span>28</span>             <span>case</span> 2 : <span>return</span> (<span>ord</span>(<span>$char</span>{1}) & 63) |
<span>29</span>                             ((<span>ord</span>(<span>$char</span>{0}) & 31) << 6<span>);
</span><span>30</span>             <span>case</span> 3 : <span>return</span> (<span>ord</span>(<span>$char</span>{2}) & 63) |
<span>31</span>                             ((<span>ord</span>(<span>$char</span>{1}) & 63) << 6) |
<span>32</span>                             ((<span>ord</span>(<span>$char</span>{0}) & 15) << 12<span>);
</span><span>33</span>             <span>case</span> 4 : <span>return</span> (<span>ord</span>(<span>$char</span>{3}) & 63) |
<span>34</span>                             ((<span>ord</span>(<span>$char</span>{2}) & 63) << 6) |
<span>35</span>                             ((<span>ord</span>(<span>$char</span>{1}) & 63) << 12) |
<span>36</span>                             ((<span>ord</span>(<span>$char</span>{0}) & 7)  << 18<span>);
</span><span>37</span>             <span>default</span> :
<span>38</span>                 <span>trigger_error</span>('Character is not UTF-8!', <span>E_USER_WARNING</span><span>);
</span><span>39</span>                 <span>return</span> <span>false</span><span>;
</span><span>40</span> <span>        }
</span><span>41</span>     }
ログイン後にコピー

2. 全角转半角

<span> 1</span>     <span>/*</span><span>*
</span><span> 2</span> <span>     * 全角转半角
</span><span> 3</span> <span>     * @param string $str
</span><span> 4</span> <span>     * @return string
</span><span> 5</span> <span>     *</span><span>*/</span>
<span> 6</span>     <span>function</span> sbc2Dbc(<span>$str</span><span>){
</span><span> 7</span>         <span>return</span> <span>preg_replace</span><span>(
</span><span> 8</span>             <span>//</span><span> 全角字符 </span>
<span> 9</span>             '/[\x{3000}\x{ff01}-\x{ff5f}]/ue',
<span>10</span>             <span>//</span><span> 编码转换
</span><span>11</span> <span>            // 0x3000是空格,特殊处理,其他全角字符编码-0xfee0即可以转为半角</span>
<span>12</span>             '($unicode=char2Unicode(\'\0\')) == 0x3000 ? " " : (($code=$unicode-0xfee0) > 256 ? unicode2Char($code) : chr($code))',
<span>13</span>             <span>$str</span>
<span>14</span> <span>        );
</span><span>15</span>     }
ログイン後にコピー

3. 半角转全角

<span> 1</span>     <span>/*</span><span>*
</span><span> 2</span> <span>     * 半角转全角
</span><span> 3</span> <span>     * @param string $str
</span><span> 4</span> <span>     * @return string
</span><span> 5</span> <span>     *</span><span>*/</span>
<span> 6</span>     <span>function</span> dbc2Sbc(<span>$str</span><span>){</span>
<span> 7</span>         <span>return</span> <span>preg_replace</span><span>(
</span><span> 8</span>             <span>//</span><span> 半角字符 </span>
<span> 9</span>             '/[\x{0020}\x{0020}-\x{7e}]/ue',  
<span>10</span>             <span>//</span><span> 编码转换
</span><span>11</span> <span>            // 0x0020是空格,特殊处理,其他半角字符编码+0xfee0即可以转为全角</span>
<span>12</span>             '($unicode=char2Unicode(\'\0\')) == 0x0020 ? unicode2Char(0x3000) : (($code=$unicode+0xfee0) > 256 ? unicode2Char($code) : chr($code))',
<span>13</span>             <span>$str</span>
<span>14</span> <span>        );
</span><span>15</span>     }
ログイン後にコピー

四、测试

示例代码:

<span>1</span> <span>$a</span> = 'abc12 345'<span>;
</span><span>2</span> <span>$sbc</span> = dbc2Sbc(<span>$a</span><span>);
</span><span>3</span> <span>$dbc</span> = sbc2Dbc(<span>$sbc</span><span>);
</span><span>4</span> 
<span>5</span> <span>var_dump</span>(<span>$a</span>, <span>$sbc</span>, <span>$dbc</span>);
ログイン後にコピー

结果:

<span>1</span> <span>string</span>(9) "abc12 345"
<span>2</span> <span>string</span>(27) "abc12 345"
<span>3</span> <span>string</span>(9) "abc12 345"
ログイン後にコピー

 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

全角と半角の違い 全角と半角の違い Jan 05, 2024 pm 04:27 PM

全角と半角の違い: 1. 文字が占めるスペース、2. 文字の表現、3. 入力方法のステータス、4. 本質的な違い、5. システム コマンドの使用。詳細な紹介: 1. 文字占有スペース、全角文字は 2 つの標準文字位置を占有し、半角文字は 1 つの標準文字位置を占有します; 2. 文字表現、全角は、1 つの文字が 2 つの標準文字位置を占有することを指します。は漢字またはその他の種類の文字であり、半角は文字が標準の文字位置を占めることを意味し、通常は英語の文字、数字、記号などに使用されます。

全角と半角を理解する: 切り替えテクニックの概要 全角と半角を理解する: 切り替えテクニックの概要 Mar 25, 2024 pm 01:36 PM

日常生活の中で「全角」と「半角」の問題に遭遇することは多いですが、その意味や違いを深く理解している人は少ないかもしれません。全角と半角は実際には文字エンコード方式の概念であり、コンピュータの入力、編集、植字などに特別な用途があります。この記事では、全角と半角の違い、切り替えテクニック、実際のアプリケーションについて詳しく説明します。まず、漢字における全角と半角の定義は、全角文字は1文字位置を占め、半角文字は1文字位置の半分を占めます。コンピューターでは、パスします

全角と半角を切り替える方法を簡単に学ぶ 全角と半角を切り替える方法を簡単に学ぶ Mar 25, 2024 pm 03:42 PM

全角と半角は、中国語の入力方法における 2 つの異なる入力状態を指します。全角は各文字が全角の文字位置を占めることを意味し、半角は各文字が半角の文字位置を占めることを意味します。コンピューターを使用して中国語を入力する場合、さまざまな入力シナリオに適応するために全角と半角を切り替える必要がある場合があります。次に、中国語入力で全角と半角を切り替える方法を誰でも簡単に学べるように、一般的に使用される全角と半角の切り替え方法をいくつか紹介します。方法 1: ショートカット キーを使用して全角と半角を切り替えるほとんどの中国語入力方式ソフトウェアでは、

全角と半角の入力方法の違いは何ですか? 全角と半角の入力方法の違いは何ですか? Feb 14, 2024 pm 02:00 PM

中国語の入力方法には全角と半角の2つの方法がありますが、中には全角と半角の違いがわからない友達もたくさんいます。全角と半角の入力方法を区別してください。句読点は半角のまま使用でき、スペースについては特に制限はありません。全角状態では、スペースバーの機能が変わります。全角状態に切り替えてスペースバーを押すと、文字間の距離が広くなり、その隙間が半角状態よりも顕著に現れます。また、全角状態では英文字の表示も異なります。半角状態では、入力された英語文字は通常の大きさになります。ただし、全角モードに切り替えると、入力された英語の文字が太字で拡大されることがわかります。全体的に

全角と半角の切り替えスキルをすぐにマスター 全角と半角の切り替えスキルをすぐにマスター Mar 25, 2024 am 10:57 AM

現代のインターネット時代では、私たちはコンピューターでテキストを入力したり編集したりすることがよくあります。この過程で、全角と半角の切り替えの問題が発生することがあります。全角と半角とは文字が占める位置の大きさを表し、全角文字は1文字幅、半角文字は1文字幅の半分を占めます。全角と半角を正しく使用することは、テキストの書式設定と均一性を確保するために非常に重要です。そのため、全角と半角の切り替えスキルを習得する必要があります。まず、全角と半角の概念を理解しましょう。全角文字とは一般的に

全角スペースと半角スペースの機能特徴を詳しく解説 全角スペースと半角スペースの機能特徴を詳しく解説 Mar 25, 2024 pm 07:21 PM

全角スペースと半角スペースは、中国語と日本語でよく使用される 2 つのスペース文字であり、組版、テキスト編集、入力方法において機能上の特徴が異なります。この記事では、全角スペースと半角スペースの特徴と適用シナリオについて詳しく説明し、読者がこれら 2 つのスペース文字をよりよく理解して使用できるようにします。まずは全角スペースの特徴を理解しましょう。 Unicode における全角スペースのエンコードは U+3000 で、通常の漢字と同じ幅で、中国語植字の空白スペースとしてよく使用されます。全角スペースの使用シナリオには次のようなものがあります。

Windowsの全角と半角を切り替えるショートカットキー Windowsの全角と半角を切り替えるショートカットキー Mar 04, 2024 pm 06:52 PM

ユーザーが通常入力メソッドを使用してテキストを挿入する場合、文字や記号の違いに気づくことがありますが、これは主に半角文字と全角文字の切り替えの違いによるものです。ここでは全角と半角の変換を素早く実現する方法を詳しく紹介します。 Windows で全角と半角を切り替えるショートカット キー ソリューション: Alt+Shift これは、全角と半角の入力モードを切り替えるために最も一般的に使用されるキーです。中国語入力環境では、このキーを押すと英語モードに、押さないと中国語モードに切り替わります。コンピュータに複数の入力方法がインストールされている場合、このキーを使用して入力方法を簡単に切り替えることもできます。解決策 2: Ctrl+Shift も全角と半角を切り替えるショートカット キーの 1 つです。このキーの組み合わせは英語入力モードで押されます。

入力方法で全角モードと半角モードを簡単に切り替える方法 入力方法で全角モードと半角モードを簡単に切り替える方法 Mar 25, 2024 pm 10:00 PM

タイトル: 入力方法で全角モードと半角モードを簡単に切り替える方法 コンピューターを毎日使用する場合、さまざまな入力シナリオやニーズに適応するために、全角と半角を切り替える必要がよくあります。全角モードは通常、漢字、英語、句読点、数字などの入力に使用され、半角モードは英語や数字の入力に適しています。しかし、入力方法に戸惑ったり、全角と半角を簡単に切り替える方法が分からなかったりする人も多いのではないでしょうか。この記事では、全角と半角の入力方法を簡単に切り替える簡単な方法をいくつか紹介します。

See all articles