人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

やりたい事:
$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 以降で動作する事

●質問者: izayoimizuki
●カテゴリ:ウェブ制作
✍キーワード:Apache IIS kernel Linux PHP
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● yyaibo
●0ポイント

http://66.102.7.104/search?q=cache:OcN9YwSEXXsJ:www.she.com.my/b...

<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>

◎質問者からの返答

> 言語:

> PHP

と書いているはずです。

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


2 ● Azsa
●40ポイント

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らしくないのが、玉に瑕ですが。


それでは失礼します。


3 ● SOBA
●30ポイント

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ