
こんにちは。お世話になっております。
先日、http://oshiete1.goo.ne.jp/qa4951480.html にて、質問させていただき、状況こそ違うのですが、変数に代入された文字列から、事前に登録された単語や記号を削除すると、変数に代入された文字列に一部文字化けが起こる現象が続いています。
※前回の質問では、str_replaceにて指定文字を削除していましたが、str_ireplaceの方が文字化けの頻度が少ない。
色々と試行錯誤を繰り返しながら、その対策を試しているのですが、一向に改善する兆しがなく困っている状況です。
ちなみに、事前に登録された単語や記号とは、別ページにて、入力されたフォームからデータをPOSTにて受け取り、以下のようなスクリプトで登録を行っています。
//$keyword = trim($keyword).PHP_EOL;
$keyword = trim($keyword)."\n";
$file = fopen($file_name, "a") or die("OPENエラー $file_name");
flock($file, LOCK_EX);
fputs($file, $keyword);
flock($file, LOCK_UN);
fclose($file);
chmod($file_name,0606);
そこで、削除したい単語をブラウザで表示(tableを使って表示)してみたところ、登録されている単語の末尾に、半角スペースがある状況です。
これは以前にも他のプログラムでも気づいてはいたのですが、今回のように不具合が一向に直らない状況で、「もしかしたらこれも原因の1つ?」と気になり質問させてもらいました。
少々回りくどい質問、かつ説明が足りないところがあるかと思いますが、この半角スペースの件、ならびに、このような状況の文字化けに関して、アドバイスなど頂戴出来れば幸いです。宜しくお願いいたします。
No.1ベストアンサー
- 回答日時:
文字化け?
つまり日本語を使っているのかな?
もしそうならその 4951480 の質問で回答してくれている mb_* を使っていないからだと思うけど?
マルチバイト文字が何であるかをまず知った方が良いんじゃないのかなぁ…
http://www.google.com/search?lr=lang_ja&q=%E3%83 …
SAYKA様
こんばんは。早速のアドバイスを有難う御座います。
変数に代入されている文字列は日本語なのですが、別ファイルに登録してある削除したい単語は、半角英数字、または全角英数となっています。
ご忠告後、前回ご回答下さったように、mb_ereg_replaceを試していますが、一部の半角記号を削除しようとすると、mb_ereg_replaceの部分でエラーが出てしまうのですが、この場合は削除したい単語がバイト数などで判別して使い分けた方が良いのでしょうか?
何か対処法がありましたら、引き続きアドバイスいただけたら幸いです。宜しくお願いいたします。
No.2
- 回答日時:
>全角英数
しつこいようだけど マルチバイトについて 調べた方が良いよ。
>mb_ereg_replaceの部分でエラーが出てしまう
「エラーが出る」って言われてもそれだけじゃ流石に情報が足りないよ・・・。
どんな正規表現文字列を使ってどんなエラーなのか、それが判らないと「正規表現がおかしいだけでしょ」としか言いようが無いからね。
そういう意味では mb_* は無関係に正規表現がおかしいだけかもしれない・・・
SAYKA様
おはようございます。
>「エラーが出る」って言われてもそれだけじゃ流石に情報が足りないよ・・・。
仰るとおりです。すみません。汗
mb_ereg_replaceですが、別ファイルに登録のある単語を削除するために
$f_data_array = file($file_name);
$f_cnt= count($f_data_array);
for($h=0; $h<$f_cnt; $h++){
$delete_key = trim($f_data_array[$h]);
$data = mb_ereg_replace($delete_key, " ", $data);//半角角スペースに置き換えている
}
としているのですが、そうすると以下のようなエラーが表示される状況です。
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: premature end of char-class in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: target of repeat operator is not specified in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: end pattern at escape in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: end pattern with unmatched parenthesis in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: unmatched close parenthesis in
Warning: mb_ereg_replace() [function.mb-ereg-replace]: mbregex compile err: target of repeat operator is not specified in
で、前回のお礼のご挨拶のときにも書きましたが、for文の中で削除する際、その単語をバイト数で分別して、
if(strlen($delete_key) >= 2){
$data = mb_ereg_replace($delete_key, " ", $data);//全角スペースに置き換えている
}else{
$data = str_ireplace($delete_key, " ", $data);//全角スペースに置き換えている
}
このようにすると、とりあえず?不具合は回避出来るようになったのですが、このようなスクリプトってやはり効率は悪いのでしょうか・・。
(前回の質問時にアドバイスいただいたforeachに関しては、今回の問題が解決できてからと思ってます)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 指定した文字から指定した文字のスペースまでを削除するVBAの構文について 6 2022/07/24 22:20
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Windows 10 Windows11についての質問ー3。 2 2022/12/13 14:58
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- 画像編集・動画編集・音楽編集 DVD Styler トラブル解決方法 6 2022/10/29 16:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのCOUNTIFが正しくカウ...
-
XMLのタグ名の禁則文字
-
Phonetic関数を利用して文章中...
-
メッセージボックスで1025文字...
-
Excel関数「COUNTIF」で”文字”...
-
文字の入力で横バー上段、中断...
-
記号は半角と全角どちらがよい...
-
全角英数文字が嫌われる理由を...
-
PHP 全角・半角・英数字 エラ...
-
VBAで英数字入力チェックしたい。
-
エクセルでの漢字、カタカナ、...
-
php言語の全角入力のチェック方...
-
ExcelのVBAでカタカナをチェッ...
-
SPREADで全角文字の半角...
-
【Excel VBA】A列の全角・半角...
-
バッチファイル 全角検索
-
特定の文字を簡単な操作で半角...
-
全角括弧と全角読点の間隔を狭...
-
全角、半角、改行コードが混在...
-
IT企業の技術屋にとって全角英...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字の入力で横バー上段、中断...
-
メッセージボックスで1025文字...
-
Excel関数「COUNTIF」で”文字”...
-
全角括弧と全角読点の間隔を狭...
-
エクセルのCOUNTIFが正しくカウ...
-
VBAで英数字入力チェックしたい。
-
全角英数文字が嫌われる理由を...
-
XMLのタグ名の禁則文字
-
文字列中の両丸括弧を取り除くV...
-
半角記号、全角記号を含む正規...
-
全角半角変換 C++/CLI
-
Excel2002 一桁数字だけ全角に置換
-
2つ以上の連続する空白文字を除去
-
エクセルでの漢字、カタカナ、...
-
Replace関数は文字数の制限ある...
-
Accessの文字数を調べたい
-
なぜインターネットでは半角カ...
-
VBScriptである文字列に半角文...
-
ExcelのVBAでカタカナをチェッ...
-
パソコンで全角、半角文字の切...
おすすめ情報