トップページ⇒php
1001コメント358KB

【PHP】下らねぇ質問はここに書き込みやがれ 29

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/09/17(日) 04:26:39ID:???
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
  (逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
  (荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
02372282006/09/21(木) 02:14:54ID:k7zFBu8v
>>235
たしかに前者の書き方ですと、>>231の問題は解決されますね。
ただその代わりに、今度は余計な改行が常に1つ、先頭に発生してしまいます。
(最初から改行を含めてるので当然ですが・・・)
たとえば前者の書き方をしておいて、textarea($hoge)が空の状態でマウスカーソルを置くと、
1行目が空行で、2行目からカーソルが始まってしまいます。
つまり1行目の改行が勝手に付いてしまっている状態ですので、今度はそれを消す手間が出てしまいます。


><textarea name=hoge><?php echo $hoge ?></textarea>
>と書くと、$hogeの最初の改行をブラウザが無視してくれてる。

そうですね。無視したあげく、再POSTの際には無かったことになっています。


>IEのこのHTML解釈って何かおかしくないか?

もしこれがIEだけでの現象だとしたら、
完全にIEの解釈がおかしいですよね。。。
02382282006/09/21(木) 02:24:28ID:k7zFBu8v
>>236
FireFoxでも同じ結果でしたか。。。
でも、
><textarea>の直後は必ず改行が正しいことになってるのかも。
・・・だとしたら、私が>>237で書きましたように、
空のtextareaには必ず先頭に空行が1つ出来てしまうわけで、
かなり気持ち悪いですよねぇ・・・。
02392352006/09/21(木) 02:25:24ID:???
>>237
> たとえば前者の書き方をしておいて、textarea($hoge)が空の状態でマウスカーソルを置くと、
> 1行目が空行で、2行目からカーソルが始まってしまいます。
ごめん。これはうちじゃ再現しない。
<textarea name=hoge>
</textarea>
って状態のHTMLでカーソルが2行目に移動できる、って意味だよね?

Windows IE6、Firefox1.0.4どっちでも再現しなかった。
02402282006/09/21(木) 02:32:32ID:k7zFBu8v
>>239
<textarea name=hoge>
</textarea>
・・・なら問題は無いのですが、mixiのプロフィール変更画面のような使い方をする場合、
実際にはスクリプト内では下記のようになると思います。
echo "
<textarea name=hoge>
$hoge
</textarea>
";
このとき、$hogeに何も入っていないと、出力されたHTMLは
<textarea name=hoge>

</textarea>
となってしまい、空の$hogeの分がぽっかり空行1つになってしまうのです・・・。


(※ちなみにこれはmixiでは再現できません。mixiではプロフを空欄に出来ない仕様なので)
0241nobodyさん2006/09/21(木) 02:36:40ID:???
>>240
あー、すまん。
<textarea name=hoge>
$hoge</textarea>
って書き方にしてみてくれ。
02422282006/09/21(木) 02:40:15ID:k7zFBu8v
>>241
あっっ、それで解決しました!!
・・・そうですよね、冷静に考えたら、もし$hogeが空だったときに
<textarea name=hoge>
</textarea>
という形にするには、$hogeの後ろの改行を無くせばいいだけでしたね。。。

頭が混乱しててそんな単純なことにも気がつきませんでした。
>>241さん、ありがとうございます!!

(それはともかく、やっぱりブラウザの解釈はおかしい部分がありますよねぇ…)
0243nobodyさん2006/09/21(木) 02:43:01ID:???
いや、わかんねー。
2大ブラウザで同じ解釈するんならスタンダードは<textarea>の次は改行なんだろうさ。
02442282006/09/21(木) 02:49:48ID:k7zFBu8v
>>243
ということは、W3Cだか何かで、textareaタグの後には必ず改行を
入れるべし・・・などと定めてるんでしょうか?

もし仮にそうだとしても、
<textarea name=hoge>hoge</textarea>
って書いた場合に、勝手に先頭の改行コードを1つ削除する…という動作の意図がよく分かりませんね。。。
0245nobodyさん2006/09/21(木) 02:51:10ID:???
なんかよくわからないけど、コレおいときますねー
つ[ttp://www.hyuki.com/diary/dia0402.html#i15_16]
>SGMLでは開始タグの直後、終了タグの直前のline breakは無視しなければならない
02462282006/09/21(木) 03:03:59ID:k7zFBu8v
>>245
それズバリですね!! ありがとうございます。
しかしそれにしても人間に優しくない規則というか、
あまり直感的じゃない決まり事だなぁ・・・。

特にプログラミングする時は、
<textarea name=hoge>{$body}</textarea>
とかって書きたい時もあるのに。。。
0247nobodyさん2006/09/21(木) 03:08:52ID:???
こっちの方が詳しいね。
ttp://www2u.biglobe.ne.jp/~fsasaki/WikiFan/wiki.cgi?WalWikiBugTrack%2f012
>各 Web ブラウザの動作状況
こういうのを見てどうするかは自分で考えればいいかと。
0248nobodyさん2006/09/21(木) 03:33:22ID:???
>>247
おお…、まさにこのスレでの今回のやり取りと全く同じことが漏れなくまとめられてるw

でもこの問題、意外と話題にならないよね。
少なくとも過去、このくだ質スレで今回のような話題を見かけた記憶がない。
02492352006/09/21(木) 04:04:15ID:???
>>245
SGML的に
「開始タグの直後、終了タグの直前のline breakは無視しなければならない」
ってのは確かに聞いたことあるけど、実際には改行って全然無視されてなくて、
例えば
hoge<span>
aho
</span>hoge
は
hoge aho hoge
みたいに空白が空いて表示されるよなw

しかも、>>247のレポートでも触れられてるけど
> その結果、興味深いことがわかりました。
> それは、「テキストエリア textera の場合タグの直前の改行は削除されない」という事実です。
という中途半端っぷりだし。
気付かないと結構ひっかかりそうな問題だよなー。
うん、いい勉強になったわ。
02502352006/09/21(木) 04:08:00ID:???
ちなみに出力にPHPタグを使った場合、?> の後ろの改行はPHPが自動除去するので
<textarea name=hoge>
<?php echo $hoge ?>
</textarea>
という最初(>>235)の書き方で多分問題ないんだわ。

>>240みたいに "〜" の中で変数展開の書き方だと
</textarea>の前の改行が問題になっちゃうのな。
0251nobodyさん2006/09/21(木) 06:21:28ID:yxCjYnZV
header('Refresh: 0;URL=○○○○○○');

ヘッダー関数は絶対URLで書けとどこかできいたのですが、
この場合でも相対パスは使っちゃいけないのでしょうか?
0252nobodyさん2006/09/21(木) 06:25:41ID:???
>>251
Refreshの使用はそもそも、推奨されません。
(W3Cのドキュメントより)

だいたい、それだと、例えば、セキュリティレベルを高にしているIEだと何も表示されないですよ

0253nobodyさん2006/09/21(木) 12:49:16ID:???
PHPとは直接関係ないけど、近年希に見る有益な情報だった。
ありがとう。>>228-250
0254nobodyさん2006/09/21(木) 12:58:17ID:???
>>253
うん、意外と重要な情報だと思うけど、滅多に話題に上らないね。

原因は、ブラウザの解釈が徹底してない(というかHTMLの仕様自体が曖昧?)のと、
textarea以外ではその現象が発生しにくい(しない?)から誰も気付かないんだろうね。
0255nobodyさん2006/09/21(木) 14:15:19ID:???
今まで改行から始まる文を入力したことがなかったからな
これからもだけど
0256nobodyさん2006/09/21(木) 14:17:23ID:???
問題は改行から始まる文を入力するだけじゃなく、
それを再度textareaで表示した上で再投稿した場合だからな。
結構気づきにくい問題だよ、これ。
0257nobodyさん2006/09/21(木) 14:23:49ID:v8Pew90x
リダイレクトの方法が、今ひとつわからん
セッションにフラグ用変数を与えて、フォームのアクションで再帰的に読み込んで
スイッチ文でそれぞれのページにリダイレクトしてるんだが
なんだかまどろっこしい
もっとスマートな方法はないものか。
0258nobodyさん2006/09/21(木) 14:28:23ID:???
>>257
それはページ遷移判定のロジックが分からんという話であって
リダイレクトの方法が分からんのとは全然話が違うと思う。

というわけでロジックの話ならコードを実際に見せないと
回答のしようがないと思うぞ。
いったいどんだけへんてこなコード書いてるんだよ。
0259nobodyさん2006/09/21(木) 15:54:33ID:???
5桁の絶対に被らないIDを生成したいんですが、
例えば、IP+HOST+ブラウザ情報のmd5ハッシュ値を求めて最初の5桁を使うなんてのはどうでしょうか?
自分で言うとc0b52f5db6481563916e30da43495e56で最初の5桁はc0b52になりますが、被る人なんてかなり確率低いですよね?
これよりももっといい方法あるでしょうか?
0260nobodyさん2006/09/21(木) 16:08:38ID:???
>>259
絶対被らない を求めるなら
かなり確率低い じゃだめなんじゃ・・・
適当に作って発行したIDを保存して
とかじゃだめなの?
md5の最初5桁くらいなら被りそうだ
0261nobodyさん2006/09/21(木) 16:13:55ID:???
>>259
5桁で絶対に被らない、って馬鹿?
その条件にこだわるなら、単純な連番にでもしとけ。
0262nobodyさん2006/09/21(木) 16:15:35ID:???
>>259

簡単確実な方法は
データを数値で保持しておいて
IDを発行するたびにシーケンシャルに数値を上げていくのが
確実だろうね。
同時にIDを発行した時とかのために排他ロック
は必要だろうけど。
0263nobodyさん2006/09/21(木) 16:28:39ID:25o/CiRu
>>189
昨日>>180の質問をしたものです。

呼び出しのサンプルです。
<?php

mail('[email protected]','test','test');

?>
以上です。特に問題があるように思えません。

前にも書きましたが、php.iniには、以下が書いてあり、sendmailを直接telnetで操作すると、きちんとリレーされてきます。(つまりtelnetでならメールが出せる)

sendmail_path /usr/sbin/sendmail -t -i

特に原因が思い当たりません。知恵をお借りしたいです。
0264nobodyさん2006/09/21(木) 16:29:31ID:25o/CiRu
>>190
mail()やmb_〜をコールすると、そのまま戻ってこないので、エラーも表示されてません。
02652572006/09/21(木) 16:58:16ID:???
http://ame.dip.jp/upload/1158/825123.txt
流れ的にはこんな感じ。
0266nobodyさん2006/09/21(木) 16:59:25ID:yxCjYnZV
「入力ー確認ー書込み」で3つのページを作成しているのですが、
入力されたデータを書き込む前の加工はどのページで行うのがふさわしいでしょうか?
0267nobodyさん2006/09/21(木) 17:02:47ID:???
>>263
おれもメール関数でめちゃくちゃ悩んで1ヶ月ぐらいしてあきらめたときがあった。
そんときの解決策。
to,サブジェクト、本文の他にFromも設定してあげたらうまくいった。
たったそれだけだけど、こんなことで1ヶ月も悩んだ。
ためしてみな。これでもだめなら別の回答者が現れるのをまつ。
0268nobodyさん2006/09/21(木) 17:09:25ID:???
ソースの軽量化に特化した本とかないかなぁ?
ちと、商品数が増えてきて、しんどくなってきた悪寒
0269nobodyさん2006/09/21(木) 17:10:45ID:???
>>267
ttp://www.php.net/manual/ja/function.mail.php
にfromなきゃ駄目って書いてあるな・・

マニュアル嫁
ソース晒せ
ってのを守ればもうちょっと早かったはず
0270nobodyさん2006/09/21(木) 17:10:47ID:???
データベースにいれるとauの絵文字が文字化けしてしまいます
対処法ありますか??
0271nobodyさん2006/09/21(木) 17:12:36ID:???
実体参照に変える
0272nobodyさん2006/09/21(木) 17:14:06ID:???
>>259
md5の5桁は20ビットですので1048576通りしかありません
被る確立はかなり高いです
0273nobodyさん2006/09/21(木) 17:15:29ID:???
>>271
kwskお願いします
0274nobodyさん2006/09/21(木) 17:39:57ID:25o/CiRu
>>263
なるほど。早速試してみます。
0275nobodyさん2006/09/21(木) 17:48:19ID:???
xpのcommandからフィールド名を参照したとき
MysqlのVARCHAR(10)のDefaultがNOT NULLってあるんですけど、これは
どういうときにNOT NULLを使うのでしょうか?
0276nobodyさん2006/09/21(木) 17:56:51ID:fiT61BpR
質問です。
$result = mysql_query("SELECT id FROM table1");
while($r = mysql_fetch_array($result)){
 echo "$r['id']:";
 $result2 = mysql_query("SELECT row1 FROM table2 WHERE id = $r['id']");
 while($r2 = mysql_fetch_array($result2))
  echo "$r2['row1'] ";
}
と同様のことを、よりスマートに行う方法ありませんか?
table1からは200件程度取り出します。
0277nobodyさん2006/09/21(木) 17:58:20ID:???
SQLの結合を使う
0278nobodyさん2006/09/21(木) 18:30:11ID:???
>273文字化けしました…

>>271
詳しくお願いします。
サンプルソースなどもあればお教えください!
0279nobodyさん2006/09/21(木) 18:41:11ID:???
クラスの参照渡しの意味合いがよくわからんです。
だれかこんなおいらに分かりやすい説明をぷりーず
0280nobodyさん2006/09/21(木) 18:41:58ID:???
>>278
携帯 絵文字 php
ぐらいで検索したんだよね?
0281nobodyさん2006/09/21(木) 18:48:20ID:25o/CiRu
>>269
残念ながら関係ありませんでした・・・fromなくっても動きました・・・
0282nobodyさん2006/09/21(木) 18:52:45ID:yxCjYnZV
セッション変数を消したいとき、unsetを使うものなのでしょうか?
またはsession_destroy();で破棄するべきでしょうか?
あるサイトでarray()で初期化しろとうたっているページを発見したのですが、
配列でセッション変数を初期化したほうがいいのでしょうか?

ご指摘お願いいたします。
02832822006/09/21(木) 19:04:35ID:yxCjYnZV
つづきです。
$hoge=セッション変数;←$hogeにセッション変数代入

session_destroy();←ここでセッション破棄

これがエラー(Notice: Undefined index: hoge)として帰ってきてしまいます。
セッションを破棄したことで、$hogeには何も入ってないからでしょうが、
どう記述していいのかわかりません。

0284えがみボンバイエイ2006/09/21(木) 19:07:17ID:???
http://ega.chu.jp/php/get_meta_tags.php
こういうサイト作り中なのですが、文字化けしてしまいまして、文字コード変換を教えてもらいたいです。

ソースは
<?php
//URL
$url = array("http://yahoo.co.jp";,"http://www.bb-chat.tv/";,"http://www.snsnavi.jp/";,"http://mixi.jp";,"http://livedoor.jp";,"http://iki.2ch2.net/";);

//$url配列を一個づつ処理
foreach ($url as $value){

//メタタグの内容を取得
$array = get_meta_tags($value);

//メタタグの内容を表示
echo "<p>サイト名(サイトへリンク):"."<a href=".$value.">サイト名</a>";
echo "<p>サイトのサムネイル:<img src=".'http://img.simpleapi.net/small/'.$value."; >" ;
echo "<p>はてなブックマーク数:<img src=".'http://b.hatena.ne.jp/entry/image/'.$value."; >" ;
echo "<p>サイトの内容:".$array["description"];
echo "<p>サイトのキーワード:".$array["keywords"];
echo "<hr />";
}
?>

で、echo "<p>サイトの内容:".'mb_convert_encoding( $array["'.'description'.'"],"Shift-JIS","auto")' ;
みたいにすればいいのかなと思うのですが、どうもうまくいきません。。。
0285nobodyさん2006/09/21(木) 19:10:43ID:???
>>284
配列をforeachに読み込んで、mb_convert_encodingで変換
0286nobodyさん2006/09/21(木) 19:12:37ID:???
>>284のやりかただと配列全体にmb_convert_encodingを処理するから
autoの判定が怪しくなるんじゃないの?
0287nobodyさん2006/09/21(木) 20:15:22ID:8hLu55dO
"=&"ってどういうときに使うものでしょうか?
0288nobodyさん2006/09/21(木) 20:19:45ID:???
>>286
http://www.google.com/search?num=50&hl=ja&inlang=ja&ie=Shift_JIS&oe=Shift_JIS&safe=off&q=get+%2B%22%3D%26%22+php&lr=lang_ja
02892872006/09/21(木) 20:20:24ID:yxCjYnZV
まちがえた
>>287へ
0290nobodyさん2006/09/21(木) 21:29:24ID:???
>>287
ビット演算子
ttp://www.php.net/manual/ja/language.operators.bitwise.php

このページ見てもビットちんぷんかんな俺には分からないけどな
0291nobodyさん2006/09/21(木) 21:33:52ID:???
こっちちゃうん?
http://www.php.net/manual/ja/language.references.whatdo.php
0292nobodyさん2006/09/21(木) 21:43:14ID:???
>>290
それは&=な。
0293nobodyさん2006/09/21(木) 22:24:48ID:yxCjYnZV
mysql4.1のmy.iniで文字コードをeuc-jpにしたら
エラー1067がでて起動できません。
文字コードがsjisだと問題なく起動できるのですが、
eucにするのは無理でしょうか?
0294nobodyさん2006/09/21(木) 22:33:18ID:???
>>293
それはMySQLのスレで聞いてきた方がいいと思うよ。
0295nobodyさん2006/09/21(木) 22:39:54ID:???
あぁ、データベース板が出来たのはつい最近の話しなんだね……。
0296nobodyさん2006/09/21(木) 22:45:48ID:???
十年一昔?
0297nobodyさん2006/09/21(木) 23:19:45ID:???
また、えがみボンバイエイかよw
02982932006/09/21(木) 23:37:31ID:???
windowsで使用上、mysqlでeucを使うのが無理だということがわかったのでsjisでがんばります。
お騒がせしました。
0299nobodyさん2006/09/21(木) 23:42:18ID:wtB1wQTq
AタグやIMGがあっても正しく自動リンクされる正規表現方法を教えてください。
http://2ch.net/ → <a href="http://2ch.net/";>http://2ch.net/<;/a>
<a href="http://2ch.net/";>http://2ch.net/<;/a> → <a href="<a href="http://2ch.net/";>"><a href="http://2ch.net/";></a>

$str = eregi_replace("([^=\"])http://([a-z0-9\_\-\./~@?=&-\#]+)([^<\"])", "\\1<a href=http://\\2 target=_blank>http://\\2</a>\\3", $str);
$str = eregi_replace("([a-z0-9\_\-\.]+)@([a-z0-9\_\-\.]+)", "<a href=mailto:\\1@\\2>\\1@\\2</a>", $str);
これだと、時々判定漏れで可笑しくなってしまいますorz
0300nobodyさん2006/09/21(木) 23:44:23ID:???
>>293
ujisで万事解決
0301nobodyさん2006/09/22(金) 00:38:03ID:???
>>299
そんな面倒が嫌だから、リンクを作ったりテキストを弄るのは表示直前なんだよ
確実にやりたいならリンクを戻すことから始めりゃいんじゃない。
0302nobodyさん2006/09/22(金) 01:07:04ID:???
>>299
真面目にやるならこんな感じ
ttp://www.din.or.jp/~ohzaki/perl.htm#AutoLink
0303nobodyさん2006/09/22(金) 01:11:38ID:???
>>299
まず最初にタグの中と外を分解して、外だけ自動リンク変換するとかにした方がいいんでは。
0304nobodyさん2006/09/22(金) 02:11:15ID:???
yyyymmddhhmmssな14桁の文字列を、UNIXタイムスタンプにさらっと変換する関数ってないでしょうか?
0305nobodyさん2006/09/22(金) 02:16:31ID:???
>>304
さらっとかどうかは知らんけど
echo strtotime(preg_replace('/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/', '\1-\2-\3 \4:\5:\6', $str));
くらいのもんじゃないの?
0306nobodyさん2006/09/22(金) 02:33:23ID:0rl6NvDW
質問です。

ログイン情報としてsession()を、掲示板の名前等を記憶されるためにsetcookie()を
同じスクリプト内で使いたいのですが、上手くいきません。どちらかだけだと大丈夫なのですが、
両方使う場合にはどうしたら良いのでしょうか?

0307nobodyさん2006/09/22(金) 02:38:27ID:???
>>306
両方SESSIONじゃダメなの?
ってか掲示板の名前を覚えさせる必要って言うのはあるのかな?
POSTとかで事足りる希ガス
0308nobodyさん2006/09/22(金) 02:48:57ID:0rl6NvDW
>>307
すいません、説明が不十分でした。
掲示板の名前っていうのは投稿した際のHNとかのことです。
0309nobodyさん2006/09/22(金) 02:49:43ID:???
>>305
サンクス
$yyyy = substr($src_date, 0, 4);//年
$mm = substr($src_date, 4, 2);//月
$dd = substr($src_date, 6, 2);//日
$hh = substr($src_date, 8, 2);//時
$mm = substr($src_date, 10, 2);//分
$ss = substr($src_date, 12, 2);//秒
なんて面倒なことをするとこでした。
0310nobodyさん2006/09/22(金) 02:56:03ID:X1gmluk1
$lines = explode ("\n", $lines);

配列である$linesの要素から、正規表現でマッチした配列の要素を削除する
方法が思い浮かびません。これはどうしたら出来るでしょうか?

preg_replace ('/^$/', '', $lines) だと、空文字列 ('') に置換できますが
配列の要素自体を取り除くことはできませんでした。
03113102006/09/22(金) 03:01:16ID:X1gmluk1
http://www.php.net/manual/ja/function.array-splice.php
ごめん。
マニュアルのArray見るの忘れてた。これでイケるかな。
03122702006/09/22(金) 03:07:31ID:cF1a5TbS
>>280
普通にそれでググってもなくない??
auの絵文字を実体参照に変えるやりかた
0313nobodyさん2006/09/22(金) 04:10:46ID:???
>>312
http://ns1.php.gr.jp/pipermail/php-users/2004-November/024085.html
0314nobodyさん2006/09/22(金) 06:52:44ID:???
>>310
foreach(range(0, count($lines) - 1) as $i) {
if(preg_match('/条件/', $lines[$i])) unset($lines[$i]);
}
0315nobodyさん2006/09/22(金) 07:35:45ID:???
>>310
こんなのもある。
$lines = preg_grep(パターン, $lines);
0316nobodyさん2006/09/22(金) 09:04:42ID:6cSapPbr
すみません、質問です。

PHP Version 4.3.10-16 です。OSはLinuxです (Debian 3.1)

以下のようなスクリプトを実行すると、

echo strtr('abc', 'b', 'B')."\n";
echo strtr('abc', array('b' => 'B'))."\n";
echo "\n";
echo strtr('abc', 'b', '')."\n";
echo strtr('abc', array('b' => ''))."\n";

以下のような結果になるのですが、

aBc
aBc

abc
ac

なぜ、三行目は「ac」にならずに「abc」と表示されるのでしょうか。

説明書を見てもそうなるとは書いてないように読めるのですが。

参考資料などありましたら教えてください。
0317nobodyさん2006/09/22(金) 09:38:17ID:???
''じゃ0バイトのデータじゃん。
0318nobodyさん2006/09/22(金) 09:45:26ID:???
>>316
> string strtr ( string str, string from, string to )
> この関数は str を走査し、 from に含まれる文字が見つかると、そのすべてを to の中で対応する文字に置き換え、 その結果を返します。

「対応する文字」だと書いてある。
ちなみにソース上では、fromの長さとtoの長さのMIN、つまり小さいほうをとってそこまでの長さ分しか処理してない。

まあ、toに空文字を指定したらfromに含まれる文字を全部削除、みたいな仕様のほうが便利だろうけどね。
俺の経験上strtrってそんなに使用頻度の高い関数じゃないし、何かperl由来の事情か何かあるんじゃね?
0319nobodyさん2006/09/22(金) 10:04:52ID:???
なるほど

strtrのもとは、perlのtr演算子、そのもとになってるのはUNIXのtrコマンドだろうけど、
確かに、それらには空文字だから削除するなんて仕様はないからこの動作のほうが自然化。

納得。(Perlだと、tr/b//d としないと削除しない)

アメリカ人が書いたPHPスクリプトに、あたりまえのように

strtr($hoge, array("\n" => "", "\r" => ""))

とか使われていたので、ついうっかりしてしまった。

どうもありがとう。
0320nobodyさん2006/09/22(金) 10:12:59ID:???
> アメリカ人が書いたPHPスクリプト

どこの誰だw
0321nobodyさん2006/09/22(金) 10:27:18ID:???
              _,,. -‐ '''''""""""'''ー 、,
           ,.r "            、 ` 、
          /               )、、 \
        /                ノ ヽ   ヽ、
        /                ル'   ヾ   ヽ
       /                /      ゙i,   ゙i
       j              ,ィ/      ゙i,  |
      lィ'             ,ィ/j/          |  iリ
       |        /l /          '"` |  |l
       リ!     ./,ノ           _,、=''''`ヘ ,リ
        ゙!     l/   ,:-ー=‐-ミ、,,_,.ノ /(::ノ-‐)ーV´
       ヽ,/`ヽヽ .ト、   (;:ソ-‐)- 、,-トi´    ,ノ
       , ヘ  ゙iヽl `ヽ,r'´      ノ ヾー--‐''゙i
      ,,.く  ゙i   ゙i    ヽ、 __,,、-'"    〉     ,!
   ハ'´  ゙!   ゙i  ,!           ´ ´    ./.......,,,,,,,,____/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ゙、゙i,__r'゙゙>ー┬-!_j      _______ ,   /;\;;;;;;;;;;;;:;;;;| 私はムスカ大佐だ。       
      ,゙V" ゙ヽ;;;! l ゙!、    ゙ー一'''''"´   /;;;;;;;;ヽ;;;;;;;;< 呼んだかい?
   ,.:r''";;;;ヽ. - ''^゙~ ゙ヽ,ヽ      ,,.、-─‐- .,/;;;;;;;;;;;;;ヽ;;;;;;;;;;|                    
,.:r'''";;;;;;;/;;r'´  -‐‐'''"´~ヽ\   (.r‐'''""゙"''''y.);;;;;;;;;;;;;;;;〉;;;;;;;\_____________
;;;;;;;;;;;;;;;;;l;;;|     _,,..、-‐^ヾ゙ヽ、 _,,ヽ    ,/'゙!;;;;;;;;;;;;∠、;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;j;;;;|           ,⊥,     ゙i    :レ' ゙!;;;;;;;;;;;;;;;;|;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;!;;;:;|        -‐''"´  ゙)ゝ、、 !   !.   !;;;;;;;;;;;;;;;;!;;;;;;;;;;;;;;;;;;;;
0322nobodyさん2006/09/22(金) 10:35:15ID:???
未だに
echo strtr('abc', 'b', '')."\n"; 
echo strtr('abc', array('b' => ''))."\n
の違いがよくわからない私に分かりやすく教えてくれませんか。
0323nobodyさん2006/09/22(金) 10:44:29ID:???
>>322
>>316の結果参照
0324nobodyさん2006/09/22(金) 10:53:46ID:???
replace系使えばいいのにって話で結託しますた
0325nobodyさん2006/09/22(金) 11:03:32ID:???
trはgrepとかと一緒でexやsedができた頃の正規表現使ったバッチ編集コマンドの1つだからな。
それに慣れてる人が互換コマンドとして使えばいいものであって、
そうでない人まであえて使う必要はそれほど無いだろう。

でもtrのPHP版での拡張モード(配列で複数ワードを指定し、多重変換は抑止してくれる)は
str_replaceで同じことするのも案外面倒くさくて、結構便利な関数だよ。
0326nobodyさん2006/09/22(金) 11:09:39ID:???
>>316
> 説明書を見てもそうなるとは書いてないように読めるのですが。
> 参考資料などありましたら教えてください。
ttp://www.php.net/manual/ja/function.strtr.php
> from と to の長さが異なる場合、長い方の余分な文字は無視されます。
じゃ参考になりませんか。
0327nobodyさん2006/09/22(金) 11:24:33ID:???
>>325
str_replaceも配列とって重複避けるモードもあるし、こっちのほうが一般的じゃないか?
PearもZFもこのスレで登場するのもstr_replaceが圧倒的に多数かと思う。
引数のとり方が違うから状況に応じて使い分けりゃいいんだけどね。
0328nobodyさん2006/09/22(金) 11:36:33ID:???
>>323
なんで違うんですか?
0329nobodyさん2006/09/22(金) 11:38:32ID:???
>>328
前者は文字単位の指定方法で、この指定では変換対象の文字が無いから無視される。
後者は単語単位の指定方法で、ちゃんと変換単語("")が指定されているから機能する。
そんだけ。
0330nobodyさん2006/09/22(金) 11:39:48ID:???
>>327
PHPってほとんど同じ機能なのにI/Fだけ違うって関数多すぎだよねw
03312702006/09/22(金) 13:55:44ID:???
>>313
それは検索で見つけたのですがリンク切れで見れないんですよ…
誰か自作した方いらっしゃらないですか?
0332nobodyさん2006/09/22(金) 14:01:00ID:???
>>331
普通に見れる。携帯からでも見れる(笑)
03332702006/09/22(金) 14:03:28ID:???
>>332
http://mlmlml.nobody.jp/sample/AuBuiltInIconConvertor.txt
リンク先じゃなくてここのことですよ?
03343322006/09/22(金) 16:08:59ID:???
>>333
見れるよ。別にあんたと見れる見れないの論争をするつもりはない。
あんたは見れないが俺は見れるんだろ。別に俺は困らん。
0335nobodyさん2006/09/22(金) 16:42:13ID:0rl6NvDW
すいません、>>306,>>308誰かわかる人いませんか?
0336nobodyさん2006/09/22(金) 17:38:22ID:???
>>334
ならいちいちレスすんな
■ このスレッドは過去ログ倉庫に格納されています