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

【PHP】下らねぇ質問はID出して書き込みやがれ 136

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2014/08/06(水) 23:31:16.38ID:GyAfw2+q
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 135
http://kanae.2ch.net/test/read.cgi/php/1405860979/

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.5
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0855nobodyさん2014/09/12(金) 21:07:39.97ID:???
>>854
お前はUnitTestが何かすらわかってないのか。
0856nobodyさん2014/09/12(金) 22:53:04.78ID:???
>>855
> 一行ずつにUnitテスト組む気か。
これに同意するはずもない程度には理解してるよ
0857nobodyさん2014/09/12(金) 22:55:51.05ID:???
>>856
UnitTestの単位が設計手法に依存するのは理解できるか?
0858nobodyさん2014/09/12(金) 22:57:33.71ID:???
今の時代にUnitTestを行う前提で設計しないなんて誰が許すの?
0859nobodyさん2014/09/12(金) 23:05:19.13ID:???
やっぱりわかってないのか。
0860nobodyさん2014/09/12(金) 23:44:16.06ID:???
ん、いつもの人が帰ってきたのかな
0861nobodyさん2014/09/13(土) 07:55:40.91ID:nUyX5JlB
jQueryダイアログの「更新する」ボタンを押した
時にAjaxで処理を行い、 success ブロックに入った時に
ダイアログを閉じようと以下のコードを記述しています。

しかし実行したところエラーが出てしまいます。
どうすればこのエラーが出る事無くダイアログを閉じる事が出来ますか?


$.ajax({
type: 'POST',
url:url_post,
data: p_data,
dataType: 'text',
success: function( data, textStatus, jqXHR )
{

//ダイアログを閉じる。
$( this ).dialog( "close" ); <−−−−ここでエラー発生



}

エラーメッセージ
Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'
0862nobodyさん2014/09/13(土) 07:59:10.48ID:???
web制作板でどうぞ
0863nobodyさん2014/09/13(土) 08:01:49.43ID:???
>>861
スレ違いだ馬鹿。適切なスレに行け!
0864nobodyさん2014/09/13(土) 08:18:59.38ID:???
それ以前に、お前らは答えられないのであった
0865nobodyさん2014/09/13(土) 08:20:27.29ID:NFvjKNVk
質問です。宜しくお願いします。
自分は昨日パソコンとPHP入門書を購入したばかりの初心者です。
http://imepic.jp/20140913/289610
http://imepic.jp/20140913/289930

PHPのif elseなのですが、どうしてもエラーがでてしまいます。
検索するとエラーを指摘された行数が</html>しかない場合は他の行に}の締め忘れやスペルミスなどが疑われるとあるのですが、一晩中いくら見つめてもそれらのミスも見当たりませんでした。
11〜16、20行目を削ると入力チェック機能はないですが正常に働きます(入力欄を空白のまま送信を押したときに「ようこそ様」になってしまいます)
何卒宜しくお願いします。助けて。
0866nobodyさん2014/09/13(土) 08:28:09.11ID:???
画像とかみにくいからコード貼ってくれよ

11行目がif($nickname==")になってるように見えなくもないがここは大丈夫か?
シングルクオテーション2コじゃなくてダブルクオーテーション1コに見える
0867nobodyさん2014/09/13(土) 08:37:24.78ID:NFvjKNVk
>>866
あ、あああありがとうございますほんとにほんとにありがとうございます。思わず飛び上がりました本当にありがとうございます。助かりました!ありがとうございます!
一晩中苦しんでた分、解放感と感動で涙でますほんと。ありがとうございます貴方は神様です!
0868nobodyさん2014/09/13(土) 08:38:09.58ID:P/42toEi
【OS名】win7 32bit
【PHPのバージョン】 5.3.5
【連携ソフトウェア】
【準備】
事前に「詐欺」というフォルダを作っておく。
【質問内容】
下記のスクリプト(is_dir)で日本語フォルダを検出できません。
  <?php
  if(is_dir("詐欺"))echo "フォルダ有り"

原因はSJIS環境と「詐」の文字の相性の悪さなんですが、
あくまでSJIS環境で「詐欺」というフォルダを検出できるようにする
(=スクリプトで対応する)にはどうすればいいですか?
0869nobodyさん2014/09/13(土) 08:38:32.41ID:???
>>867
他のことから学んだほうがいい。
0870nobodyさん2014/09/13(土) 08:39:28.85ID:/ciiq0tC
http://blogos.com/article/94298/forum/
08718682014/09/13(土) 08:44:10.12ID:P/42toEi
「詐欺」というフォルダ名の語感が悪いので念の為に書いておきますと、
2ch専用ブラウザ「JaneStyle」で生成されるdatフォルダをphpで簡単に削除しようと思うんですよね。
ところが「防犯・詐欺対策板」のフォルダがphpで削除できないんです。「詐」の問題で。
それで質問させていただきました。
0872nobodyさん2014/09/13(土) 09:34:25.35ID:???
>>868
http://ja.wikipedia.org/wiki/Shift_JIS#2.E3.83.90.E3.82.A4.E3.83.88.E7.9B.AE.E3.81.8C5C.E7.AD.89.E3.81.AB.E3.81.AA.E3.82.8A.E3.81.86.E3.82.8B.E3.81.93.E3.81.A8.E3.81.AB.E3.82.88.E3.82.8B.E5.95.8F.E9.A1.8C
0873nobodyさん2014/09/13(土) 09:54:52.82ID:P/42toEi
失敬。詐欺の「詐」ではなく詐欺の「欺」の方でしたか。

では具体的にどのように改善すればクリアできるんでしょうか???

なおphp.iniはSJIS主導のものになっていますがphp.iniの内容の変更は不可です。
php.iniの内容、主にエンコード関係を変更すると他のphpスクリプトがおかしくなるからです。
ですから>>868のスクリプト単体でクリア希望です。
0874nobodyさん2014/09/13(土) 10:03:52.36ID:???
>>872に解決方法いくつか書いてるでしょ
>この問題を回避する伝統的な方法として、ソースコード全体をEUCコードやUTF-8などに変換してから
http://jp2.php.net/manual/ja/function.readdir.php
ここの例2のコード使ってやってみな
4行目の入力先の$entryをUTF-8に変換して詐欺と比較
echoするところはフォルダ有りって出力するならSJIS-winに戻して
0875nobodyさん2014/09/13(土) 10:23:49.55ID:P/42toEi
こうですか?
詐欺フォルダは「フォルダではありません」と表示されますけど・・・

<?php
if ( $handle = opendir( '.' ) ) {
while ( false !== ( $entry = readdir( $handle ) ) ) {
if ( $entry != "." && $entry != ".." ) {
echo $entry;
$entry2 = mb_convert_encoding( $entry, "UTF-8", "auto" );
if ( is_dir( $entry2 ) ) {
echo " はフォルダです";
}else {
echo " はフォルダではありません";
}
echo"<br><br>";
}
}
closedir( $handle );
}
0876nobodyさん2014/09/13(土) 10:33:00.66ID:P/42toEi
誤解があるようなので説明しますと
「このフォルダは詐欺フォルダですか Yes or No」ということがしたいのではなく、
詐欺フォルダも他のフォルダも全てサーチしてフォルダを全消ししたいんです。

× if(is_dir(フォルダ名)=="詐欺")) {echo "これは詐欺フォルダです";}else{echo "これは詐欺フォルダではありません";}

○ if(is_dir(フォルダ名)) rmdir(フォルダ名);
0877nobodyさん2014/09/13(土) 10:35:53.78ID:P/42toEi
× if(is_dir(フォルダ名)=="詐欺")) {echo "これは詐欺フォルダです";}else{echo "これは詐欺フォルダではありません";}

↑これは大間違い。

× if(is_dir(フォルダ名) && フォルダ名=="詐欺")) {echo "これは詐欺フォルダです";}else{echo "これは詐欺フォルダではありません";}

こんなかんじだったっけ?
0878nobodyさん2014/09/13(土) 10:38:28.13ID:???
何で名前が”詐欺”であるか見る必要があるの?
0879nobodyさん2014/09/13(土) 10:45:31.98ID:P/42toEi
”詐欺”であるか見る必要は全然無いですよ。
「専ブラのフォルダをphpで全消ししたいのですが『防犯・詐欺対策』フォルダがis_dirでフォルダとして検出できないから
『防犯・詐欺対策』フォルダが消せない。だからなんとかなりませんか?」
というのがそもそもの趣旨です。
そのために>>868で例として  if(is_dir("詐欺"))echo "フォルダ有り" と書いたのが失敗だったなぁ・・・
0880nobodyさん2014/09/13(土) 10:48:00.49ID:???
じゃあ、全消しすれば?
なんで名前見る必要があるの?
0881nobodyさん2014/09/13(土) 10:51:39.64ID:P/42toEi
>>880
だから「詐欺」フォルダは消えないんだって(笑)。
自分で試してみてください
0882こう書くべきだった >>8682014/09/13(土) 10:52:33.51ID:P/42toEi
【OS名】win7 32bit
【PHPのバージョン】 5.3.5
【連携ソフトウェア】
【準備】
事前に「詐欺」というフォルダ名のフォルダを作っておく。
【質問内容】
フォルダを全部削除したいのですが詐欺フォルダだけ削除できません。
削除するにはどうすればいいですか?

<?php
if ( $handle = opendir( '.' ) ) {
while ( false !== ( $entry = readdir( $handle ) ) ) {
if ( $entry != "." && $entry != ".." ) {
if ( is_dir( $entry ) ) rmdir( $entry );
}
}
closedir( $handle );
}
0883nobodyさん2014/09/13(土) 10:53:40.43ID:???
windwos版PHPの ファイル操作関係の処理の5C問題はいまさら変えるといろいろあるので
ぶっちゃけ非対応です。 

//code utf8
$dirNameSJIS = mb_convert_encoding ("詐欺", 'CP932', 'UTF-8');
exec( "rmdir /S/Q $dirNameSJIS" );
0884nobodyさん2014/09/13(土) 11:04:56.40ID:P/42toEi
レスどうもです。無理ですかー。一旦諦めます。
下2行はヒントかな。exec bニか自分は使わbネいのでよくわbゥりません。挙涛ョを勉強してみbワすm(_ _)m

では皆様ごきんよう。
0885nobodyさん2014/09/13(土) 11:07:24.36ID:???
PHPを5.2にしたら良いのでは?
0886nobodyさん2014/09/13(土) 11:10:04.78ID:???
>>881
<?php
`for /F %a in ('dir /AD /B /W .') do rmdir /S /Q %a`;
0887nobodyさん2014/09/13(土) 11:16:07.09ID:???
こういう処理に強いのはPerl
0888nobodyさん2014/09/13(土) 11:25:41.50ID:???
適材適所っていってな
なんでPHPでやろうと思ったのか
バッチファイル作ればいいのに
PHP出来るなら余裕でしょ
0889nobodyさん2014/09/13(土) 12:42:36.69ID:???
rm -rf /
0890nobodyさん2014/09/13(土) 14:51:45.60ID:hQRZGKiO
どなたか教えてください。


jQueryダイアログの「更新する」ボタンを押した
時にAjaxで処理を行い、 success ブロックに入った時に
ダイアログを閉じようと以下のコードを記述しています。

しかし実行したところエラーが出てしまいます。
どうすればこのエラーが出る事無くダイアログを閉じる事が出来ますか?


$.ajax({
type: 'POST',
url:url_post,
data: p_data,
dataType: 'text',
success: function( data, textStatus, jqXHR )
{

//ダイアログを閉じる。
$( this ).dialog( "close" ); <−−−−ここでエラー発生



}

エラーメッセージ
Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'
0891nobodyさん2014/09/13(土) 15:07:56.67ID:???
web制作板でどうぞ
0892nobodyさん2014/09/13(土) 15:58:29.15ID:???
>>890
スレ違いだ馬鹿。適切なスレに行け!
0893nobodyさん2014/09/14(日) 18:04:24.19ID:5DX/CGId
"abcabcabc"という文字列からaで囲まれたbcを削除したいです
abcabcabc -> aaabc

考えたのは
$text = 'abcabcabc';
$text = preg_replace('/(a)bc(a)/', '$1$2', $text);
$text = preg_replace('/(a)bc(a)/', '$1$2', $text);

という方法なのですがもっとスマートな方法があれば教えて下さい
0894nobodyさん2014/09/14(日) 20:11:27.24ID:???
詳細わかってないけど、abcaをaaに置換とか
0895nobodyさん2014/09/14(日) 20:11:52.68ID:???
>>組長
http://peace.2ch.net/test/read.cgi/tech/1387257592/
こちらで聞いたほうが良いと思います
0896nobodyさん2014/09/14(日) 21:26:37.73ID:5DX/CGId
>>895
ありがとうございます
こちらのスレに答えが書いてありました

$text = 'abcabcabc';
$text = preg_replace('/(?<=a)bc(?=a)/', '', $text);
0897nobodyさん2014/09/14(日) 22:10:25.26ID:???
正規表現を使わずにやる方法を訊いたのかと思った。
0898nobodyさん2014/09/14(日) 22:57:25.46ID:???
HTMLタグの編集でもしたいのかな?
0899nobodyさん2014/09/16(火) 15:01:00.57ID:???
PEARの書籍やサイトページが古いものが多いのですが
いまでも問題なく使っていけるライブラリなのでしょうか?
0900nobodyさん2014/09/16(火) 15:01:33.06ID:PDR72HzF
すみませんID忘れていました
0901nobodyさん2014/09/16(火) 17:20:56.28ID:/DjoSEZD
WEBからPHPにアクセスしたときにファイルに文字を書き込むようにしたいのですが、
file_put_contensやexecでの書きこみ等いろいろ試してみましたが出来ません。
もしかしてローカルからの実行じゃないとできないとかそういう制約とかってありますか?
0902nobodyさん2014/09/16(火) 17:29:04.31ID:???
ファイルのパーミッションを変更して書き込みできる状態にしてないとかか
0903nobodyさん2014/09/16(火) 17:29:49.27ID:fb/e2Lk4
サーバーからすると、実行環境はローカル。
0904nobodyさん2014/09/16(火) 17:30:46.25ID:???
ない。
リモートであろうがなかろうが、コマンドやOSの機能を実行するのは、あくまでWebサーバ(あるいはfpm)のOS上のユーザ。
よって、そのユーザが対象のファイルなりディレクトリなどに対して権限がなければ実行できない。
0905nobodyさん2014/09/16(火) 17:40:24.81ID:???
普通にモジュールで動かしてるなら、Apachのhttpd.confに書いてあるUser 権限で動いてると思うよ
0906nobodyさん2014/09/16(火) 18:00:53.09ID:/DjoSEZD
>>902
>>903
>>904
>>905
ありがとうございます
所有者変更して試してみます
0907nobodyさん2014/09/16(火) 18:41:21.77ID:???
その前にエラーログ読もうよ
0908nobodyさん2014/09/16(火) 19:04:06.22ID:???
Webサーバの実行ユーザをAdministratorもしくはrootにすれば解決するよ :)
0909nobodyさん2014/09/17(水) 00:45:00.95ID:???
>>901
最近まで更新されてるものは使えるんじゃね?
色々警告出るのは諦めるしか無い。気になるなら自作しよう。
0910nobodyさん2014/09/17(水) 10:19:16.22ID:???
>>901
まず思い当たる解決方法を試すんじゃなくて、原因を探すことを考えたほうがええ。
エラーログ読むか、エラーメッセージ読むか、
それが表示されてなければ、display_errorsとerror_reportingでぐぐるべし。
0911nobodyさん2014/09/17(水) 11:53:23.26ID:???
普通に書き込み先に権限与えてないんだろ
よくある話やわ
0912nobodyさん2014/09/17(水) 12:04:55.25ID:iY5IX8KP
includeについての質問です。
複数のファイルを読み込みたいんですが、ファイルの最初に

<?php
include("file1.php");
include("file2.php");

こんな感じで読み込むことは不可能ですか?
また、このfile1、file2のように複数のファイルを読み込む場合はどのような方法がありますか?
他の方法で出来ないわけではないですが、出来れば上記のような方法で最初に纏めて読み込みたいです。
よろしくお願いします。
0913nobodyさん2014/09/17(水) 12:06:16.83ID:8LsJNBjR
どこが不可能なんだ?
そう思う理由は何だ?
0914nobodyさん2014/09/17(水) 12:06:33.20ID:???
可能です
0915nobodyさん2014/09/17(水) 12:13:16.74ID:iY5IX8KP
>>913
普通に出来ると思ってたんですが、なぜかエラーになってしまいます。
どちらか1つにすると問題なく動くので、もしかしたら不可能なのかと思いました。
再度試してみましたがなぜか出来ません。
0916nobodyさん2014/09/17(水) 12:18:19.17ID:???
◆質問する時の注意
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
0917nobodyさん2014/09/17(水) 12:24:19.85ID:???
>>1
0918nobodyさん2014/09/17(水) 12:38:54.33ID:???
急募 エスパー 640円/時
0919nobodyさん2014/09/17(水) 12:46:41.72ID:???
file1とfile2で同じ関数でも定義してんじゃねえの
0920nobodyさん2014/09/17(水) 15:04:05.67ID:???
namespace だな
0921nobodyさん2014/09/17(水) 20:22:15.93ID:Jpx5qfxy
基礎的な質問だと思うけどググっても出なかったから聞かせてくだしあ

PHPのforeach構文について質問

?php
$numbers = array(1, 2, 3);

foreach($numbers as $item) {
echo $item;
}


上のコード内の

forreach ($numbers as $item)

っていう部分で

「$numbersという配列を$itemと見なせ」みたいな命令をしてると思うんだけどこれってなんで
必要なの?
要するに


?php
$numbers = array(1, 2, 3);

foreach($numbers ) {
echo $numbers;
}
じゃなんで駄目なの??
0922nobodyさん2014/09/17(水) 20:23:35.00ID:Jpx5qfxy
なんでわざわざ配列名変える必要あるのでしょうか

そのまま$numbersの中のそれぞれの要素に対してechoしろ
でいいんじゃないのかなーと
0923nobodyさん2014/09/17(水) 20:34:11.72ID:???
そういう風に使うもんだ、と覚えるしかない。
英語の意味的にどうだとかいっても、命名した本人じゃないとわからない。
0924nobodyさん2014/09/17(水) 20:38:44.64ID:Jpx5qfxy
>>923
そういうものかあ
あざっす
0925nobodyさん2014/09/17(水) 20:55:03.97ID:???
> そのまま$numbersの中のそれぞれの要素に対してechoしろ
> でいいんじゃないのかなーと

$numbers = array(1, 2, 3);

foreach($numbers ) {
echo $numbers;
echo $numbers;
}

こうした時どうなってほしいのかとか、あれこれ考えてみたら?
0926nobodyさん2014/09/17(水) 21:08:31.08ID:???
配列名をかえてるんじゃない。
$numbersという配列(リスト)を先頭から順番に見ていって、
現在の位置(インデックス)にある値を$itemに入れるという意味。
>>921のコードだと$numbersの配列数だけ配列をechoするってコードで意味がおかしい。

PHPだけじゃなくてどの言語のForeach文も同じようなもん。
たいていinとかコロンで表してasなのは少数派だけど。
0927nobodyさん2014/09/17(水) 21:14:25.21ID:???
foreachの中で、
$numbersという配列を参照や変更したい場合どうすんのさ
0928nobodyさん2014/09/17(水) 21:39:22.80ID:???
>>922
itemが配列中の1つの要素だということは、わかってる?
foreach内で配列全体を見たくなったらどうするの?
連想配列の時どうするの?
0929nobodyさん2014/09/17(水) 22:18:22.78ID:???
as を英単語の「〜として」という「みなし」の意味にとらえているからおかしくなる。
foreach ($array as $val) は、 別にみなしている訳じゃない。
その意味で、foreachのasは、厳密に言えば英単語のasの意味とは少し違うかもしれん。
0930nobodyさん2014/09/17(水) 23:19:19.18ID:???
>>921
>「$numbersという配列を$itemと見なせ」みたいな命令をしてると思うんだけど

誤って解釈した結果に対しておかしいおかしいって言ってるだけじゃん

そりゃおかしいよ
0931nobodyさん2014/09/18(木) 02:27:41.57ID:???
for (each $list) (as $item)
0932nobodyさん2014/09/18(木) 03:39:28.93ID:???
>>923 を読んで納得してしまったことに大きな問題がある。
おまじないかってーの。
0933nobodyさん2014/09/18(木) 06:06:52.80ID:???
おまじないとか言ってる人はあほだよね
0934nobodyさん2014/09/18(木) 06:19:14.72ID:???
$item を $numbers のおのおのにして
とか何語だよと思った
日本語化は企画倒れだったな
0935nobodyさん2014/09/18(木) 10:20:26.81ID:???
マニュアルも読まん馬鹿には >>923 みたいな答えしかない気がする。
0936nobodyさん2014/09/18(木) 22:29:13.02ID:KawB1H3L
EASE US PARTITION MASTERの簡単な使い方

http://know-how-tree.com/archives/tag/partition
0937nobodyさん2014/09/18(木) 23:26:06.43ID:b2+T+l6A
PHPに詳しい方がいたらご教授お願いします。
他スレでスレ違いと言われました(マルチではないです)

下記のコードで不明点があります。
$email_sub = 'アンケートを受け取りました。';
$email_body = $nickname."様へ\nアンケートのご協力、ありがとうございました。";
$email_body = html_entity_decode($email_body, ENT_QUOTES, "UTF-8");
$email_head = 'From:[email protected]';
mb_language('Japanese');
mb_internal_encoding("UTF-8");
mb_send_mail($email, $email_sub,$email_body, $email_head);

"$email_body = html_entity_decode($email_body, ENT_QUOTES, "UTF-8");"
の意味が調べてもわかりません、どういう意味でしょうか?
ダブルクォーテーションとシングルクォーテーションに対して何をしているのでしょうか?
また、何故"UTF-8"と指定しているのでしょうか?

あるいわ$nicknameに入る不正な文字列として扱われるシングルダブルクォートとダブルクォートを
無害化(サニタイジング)してる認識ですかね・・・。
0938nobodyさん2014/09/19(金) 00:40:03.12ID:???
>>937
調べても分からないとは?
http://php.net/manual/ja/function.html-entity-decode.php
このページにこの関数の情報は全て書かれていると思うが。
09399372014/09/19(金) 01:55:35.08ID:R/LZD/Io
>>938
そこのマニュアルを見ても、いまいちなんです・・・
上記コードの簡単に解説をお願いします。

エスケープ処理しているのですかね
09409372014/09/19(金) 02:02:27.72ID:R/LZD/Io
また
$email_body = $nickname."様へ\nアンケートのご協力、ありがとうございました。";
のダブルクォーテーション(変数nickname以降からセミコロン前のダブルクォーテーション)を
"&quot;"として表示させず普通にダブルクォーテーションとしてるのでしょうか?

よくわかりません。
09419372014/09/19(金) 02:05:12.39ID:R/LZD/Io
あるいは"$nickname"にダブルクォーテーションが混入された際の
サニタイジング、エスケープ処理なのでしょうか?

自分なりに考えた結果です、必要なら全コードも記述します。
0942nobodyさん2014/09/19(金) 02:37:07.89ID:???
html_entity_decode
>HTML エンティティを適切な文字に変換する
&quot;や&lt;なんかを "や<などに変換するってこと

UTF8の指定はPHP 5.5以前を使っているのなら指定しといたほうがいいみたい

html_entity_decodeはむしろエスケープ処理の逆だと思う
メール文をエスケープしても仕方ないしね
0943nobodyさん2014/09/19(金) 02:52:29.08ID:???
>>941
前段階がわからないから書かれているところだけ見ると
最期がmb_send_mail()なんだし、
html形式を作っている箇所は見当たらないから
テキストでメールを送るわけでしょ
テキストメールに実体参照が混じったら読みづらいから普通の文字列にする

UTF-8の指定は無難だからで、深く考えるほどのこともない
嫌だったらサポートされている他のコードに合わせて書き換えればいい
09449372014/09/19(金) 03:06:31.06ID:R/LZD/Io
>>942->>943
夜分遅くにレスをありがとうございます。
要はメールで送った際に&amp;quot;や&amp;lt;が本文に表示されたら
読みにくいから普通に"(ダブルクォーテーション)などで表示させるための
コード記述と考えて良いでしょうか?
09459372014/09/19(金) 03:09:17.63ID:R/LZD/Io
因みに以下がコードです。
<?php
$nickname = $_POST['nickname'];
$email = $_POST['email'];
$goiken = $_POST['goiken'];

$nickname = htmlspecialchars($nickname);
$email = htmlspecialchars($email);
$goiken = htmlspecialchars($goiken);

print'<p>';
print $nickname;
print'様<br />';
print'ご意見ありがとうございました。</p>';

print'<p>頂いたご意見「';
print $goiken;
print'」</p>';

print'<p>';
print $email;
print'にメールを送りましたのでご確認ください。</p>';

$email_sub = 'アンケートを受け取りました。';
$email_body = $nickname."様へ\nアンケートのご協力、ありがとうございました。";
$email_body = html_entity_decode($email_body, ENT_QUOTES, "UTF-8");
$email_head = 'From:[email protected]';
mb_language('Japanese');
mb_internal_encoding("UTF-8");
mb_send_mail($email, $email_sub,$email_body, $email_head);
?>
09469372014/09/19(金) 03:11:39.61ID:R/LZD/Io
仮にわざわざニックネーム入力欄に
&quot;や&lt;などを入力する人はいないと思いましたが・・・
0947nobodyさん2014/09/19(金) 03:23:10.85ID:???
わざとらしい
0948nobodyさん2014/09/19(金) 03:30:04.25ID:???
>>945
htmlspecialcharsを使うとgt;や&lt;に変換される
0949nobodyさん2014/09/19(金) 08:18:05.30ID:???
>>945
エスケープ前の文字列を残しておけばいいのに変数を上書きしてるから、わざわざデコードしてるんでしょそれ
0950nobodyさん2014/09/19(金) 08:46:46.41ID:???
htmlspecialchars_decodeの無かった時代のものでしょ。
やりたかったであろうことは単に元に戻したいというだけかと。
0951937-9452014/09/19(金) 20:50:40.14ID:R/LZD/Io
皆さん、ご回答頂きましてありがとうございました。
すごい悩んでいた疑問が解決できて先に進めそうです、心から感謝です!

一応整理なんですが以下の解釈・認識で合っていますでしょうか?
ご返答頂ければ幸いです。
先ずは、>>945のソースで(省略部分あり)

1. $nickname = $_POST['nickname'];で値を受け取る。

2. $nickname = htmlspecialchars($nickname); 無害化処理
勿論、$nicknameに特殊文字が混入の場合。
(例 "(ダブルクォーテーション)や<(カッコ)などを&amp;quot;や&amp;lt;に
変換する。

3. $email_body = $nickname."様へ\nアンケートのご協力、ありがとうございました。";
の変数$nicknameに無害化された特殊文字(&amp;quot;や&amp;lt;)が入る。

4. メールで送るのでテキストの体裁が悪くなる為に
$email_body = html_entity_decode($email_body, ENT_QUOTES, "UTF-8"); で
無害化されている特殊文字(&amp;quot;や&amp;lt;)を、"や<に戻している。

これで合っていますでしょうか?
0952nobodyさん2014/09/19(金) 21:17:45.46ID:???
書いた人間でもないのにそいつの意図汲めって無茶ぶりされても困るんですよ
0953nobodyさん2014/09/19(金) 21:44:47.11ID:???
>>951
どこのソースコード?
0954nobodyさん2014/09/19(金) 22:02:16.72ID:???
>>951
合っていると思うよ。
ただ、そのコードなら、出力時にhtmlspecialcharsに通すべき。
print htmlspecialchars($nickname, ENT_QUOTES, "UTF-8");

こうすれば、あとで、html_entity_decodeを使わなくて済む。
まあ、そもそも、無害化したままの文字列でメール送信しても良さそうだけどね。
レス数が950を超えています。1000を超えると書き込みができなくなります。