文字化けせずに文字列反転を実現する
php メソッド: 1. PHP サンプル ファイルを作成し、エンコードを utf8 に設定します; 2. mb_strlen 関数を使用して utf8 文字列の長さを取得します; 3. 文字列を分割します配列に追加する; 4. 配列キー名のサイズを反転する; 5. 配列内の単一の文字要素を文字列に再結合します。
この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、DELL G3 コンピューター
文字列反転を実現する方法php で文字化けせずに ?
文字化けを避けるために PHP で中国語の文字列を反転する方法:
ブロガーが今日オンラインで PHP の面接の質問を見ていたとき、彼はこれを見ました 質問、文字列を反転する方法、この機能を実現できる組み込み関数 strrev があると思いましたか?後で試してみたところ、この機能は英語文字のみを反転でき、漢字は文字化けしてしまうことが分かりました。主な理由は依然としてコーディングの問題です。
PHP では、utf-8 でエンコードされた中国語は 3 バイトとして計算され、gb2312 は 2 バイトとして計算されます。したがって、中国語の文字列の一部の関数を実装したい場合は、まずエンコーディングの問題を解決する必要があります。
今日、この機能はコーディング部門から始まります。
is_string()//判断参数是否为字符串,这个大家应该都知道 mb_check_encoding()//用来检查给定的字符串是否属于指定的编码 mb_strlen()//用来获取字符串长度 mb_substr()//用来截取字符串中的字符 krsort()//将数组按键名由大到小排序上述
上記では mb で始まる 3 つの関数が使用されていますが、mb で始まる関数はマルチバイト文字列を処理するために使用されます。文字列エンコーディングを指定します。
mb_check_encoding() は 2 つのパラメータを受け入れます。最初のパラメータは文字列である必要があります。2 番目のパラメータは文字エンコードを入力し、その文字列がそのエンコードに属するかどうかを判断し、ブール値を返します。最初のパラメータの場合、パラメータは省略されています。2 つのパラメータはデフォルトで内部エンコーディングに設定されており、mb_internal_encoding() を通じて表示できます。
mb_strlen() には 2 つのパラメータがあり、1 つ目は文字列の内容、2 つ目は文字列のエンコーディングです。
mb_substr() には 4 つのパラメータがあります。1 つ目はインターセプトする文字列の内容、2 つ目はインターセプトの開始位置、3 つ目はインターセプトの長さ、4 つ目は文字列のエンコーディングです。 string (この場合、UTF-8 が選択されており、他のエンコードでは正しい結果が得られません)。
次は完全なコードです。短いコメントにはマークが付けられています。実際、一度読めば理解できます:
<?php header("Content-type:text/html;charset=utf-8"); $s="这是我的技术博客,欢迎多多来访!"; function str_rev($str){ //先判断参数是否为字符串,且为UTF8编码 if(!is_string($str)||!mb_check_encoding($str,"utf-8")){ die("输入的不是utf8类型的字符串"); } //用mb_strlen函获取算utf8字符串的长度 $length=mb_strlen($str,"utf-8"); //声明一个数组备用 $arr=array(); //将字符串拆开放入数组 for($i=0;$i<$length;$i++){ $arr[$i]=mb_substr($str,$i,1,"utf-8"); } //将数组按键名大小反转 krsort($arr); //将数组中单个字符元素重新组合成字符串 $str=implode("",$arr); //将翻转后的字符串返回 return $str; } echo $s."<br>"; echo str_rev($s); /* 得到结果: * 这是我的技术博客,欢迎多多来访! * !访来多多迎欢,客博术技的我是这 */ ?>
本文に誤りがある場合完了できるように、それらを指摘してください。
推奨学習: 「PHP ビデオ チュートリアル 」
以上がPHPで文字化けせずに文字列反転を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。