やりたい事:

$messegeから任意の文字数の文字を取得

知りたいこと:
$messegeから任意の文字数の文字を取得を下の条件でする手段

言語:
PHP

環境:
Linux Kernel 2.6.X + Apache 2.X + PHP 5.X,
Windows NT 5.1 + IIS 5.1 + PHP 5.X

その他条件:
環境及びこの答えを記述するPHPファイル以外のファイルを必要としない事,
PHPファイル及び$messege内の文字コードを問わない事
(ただしPHPファイルと$messege内の文字コードは同一のものとする),
$messegeには改行は含まれない,
$messegeにはUTF-8で定義された文字全てがランダムな順番でランダムな数が入っているとする

出来れば出来て欲しいこと:
1byte文字の1文字と2byte文字の1文字を同じ1文字として評価できる事,
Linux Kernel 2.4.X 以降 + Apache 1.3.X 以降 + PHP 4.0.X 以降で動作する事,
Windows NT 4.0 以降 + Apache 1.3.X 以降 + PHP 4.0.X 以降で動作する事,
Windows NT 4.0 以降 + IIS 4.0 以降 + PHP 4.0.X 以降で動作する事

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:yyaibo No.1

回答回数89ベストアンサー獲得回数0

<script language=”JavaScript”>

var postmaxchars = 10000;

var isadmin = ”0”;

function checklength(theform) {

if (postmaxchars != 0) { message = ”系统限制: 10000 字节”; }

else { message = ””; }

alert(”¥n当前长度: ”+theform.message.value.length+” 字节¥n¥n”+message);

}

function validate(theform) {

if (theform.message.value == ”” && theform.subject.value == ””) {

alert(”请完成标题或内容栏。”);

return false; }

if (postmaxchars != 0 && isadmin != 1) {

if (theform.message.value.length > 10000) {

alert(”您的帖子长度超过限制¥n¥n当前长度: ”+theform.message.value.length+” 字节¥n系统限制: 10000 字节”);

return false; }

else { return true; }

} else { return true; }

}

</script>

id:izayoimizuki

> 言語:

> PHP

と書いているはずです。

また処理の特性上サーバサイドで処理しなければなりません。

2005/04/15 21:54:51
id:Azsa No.2

回答回数6ベストアンサー獲得回数0

ポイント40pt

http://mikeneko.creator.club.ne.jp/~lab/kcode/index.html

$B%_%1%M%3$N(B $BJ8;z%3!<%I$NIt20(B

比較的簡単に処理を済ませる方法としては、MB_SubStrを使う方法があります。


string Mb_SubStr(String 文字列,int 開始位置 , int 長さ , string 文字エンコーディング)


引数のうち、文字エンコーディングは省略可能です。

(内部も自演コーディングが使用されます。)

複数のOSでの使用を考えておられるようですので、

なんらかの統一した文字エンコードを使用する必要があるといえます。


ただし、マルチバイト関数群が機能するのは、PHP4.06以降ですので、

4.05以前のPHPでのマルチバイト処理を行う場合、

自前で処理を記述する必要があります。

こうなってくると、文字コードに応じてバイト単位で

検証を行っていく必要があります。


Perlをはじめとして、過去から問題になってきている部分ですので、

さまざまな資料がありますので、そちらを参考にルーチンを作成されるのも良いかとは思います。

PHPらしくないのが、玉に瑕ですが。


それでは失礼します。

id:SOBA No.3

回答回数65ベストアンサー獲得回数6

ポイント30pt

国際化関数の mbsubstr() で実現できると思います。

id:izayoimizuki

Azsa様,SOBA様ありがとうございます。

2005/04/17 21:25:34

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません