PHP初心者です。
trimファンクションを使って前後の全角スペースを削除したいのですが
$test = " 左右に全角スペースがある文字列 ";
echo trim ( $test , " " );
だと問題なく表示されるのですが以下のようにテキストボックスに入力した文字の
前後の全角スペースを削除しようとすると最初の1文字目が文字化けします。
●test_input.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>前後の全角スペースを削除する</title>
</head>
<body>
<form action="test.php" method="get">
<dl>
<dt>文字を入力してください。</dt>
<dd><input type="text" name="test" size="50" maxlength="50" id="test" />
</dd>
</dl>
<input type="submit" value="送信する" />
</form>
</body>
</html>
●test.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>前後の全角スペースを削除する</title>
</head>
<body>
<p>入力文字</p>
<?php
$test = ($_REQUEST['test']);
echo ($test);
?>
<br />
<br />
<p>trim ( $test , " " )</p>
<?php
echo trim ( $test , " " );
?>
</body>
</html>
どこがいけないのでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
trim関数の第二引数は、マルチバイト文字を受け付けません。
受け付けている様に見えますが、実際には、ソレをシングルバイトに展開しているイメージです。
付きまして、
<?php
echo tirm($test, " ");
//これを、やめて、
mb_regex_encoding("utf-8"); //これは実際にはスクリプトの先頭とかに一回だけ記述してやればOK
echo mb_ereg_replace("^ *(.+?) *$", '\\1', $string);
?>
といった具合にすればいけると思いますが、いかがでしょう。
No.4
- 回答日時:
あぁ、そうか。
正規表現が悪すぎました。
お詫びして訂正します。すみません。
<?php
echo mb_ereg_replace("^ *| *$", '', $string);
?>
これでいいですね。
utf-8固定なら、yuu_xさんの仰るとおりpreg_replaceのほうが早いです。
No.2
- 回答日時:
よく分からんけど、ひらがな、カタカナ、一部記号なら確実に化ける。
他にも多数。用件を満たす場合、trim はふさわしくない。大半がシングルバイト関数だと何度いったら。。。まぁいい。
trim の第二引数は、char list を取る。したがって 全角スペースに含まれる バイトコード、xE3、x80 が削除される。
ひらがな、カタカナ、その他記号は E3 から始まるため、先頭バイト(80 を含んでいればそれを含む)が削除され文字として意味を成さなくなる。
マルチバイトを消したければマルチバイト関数、あるいは他に代替がない場合は文字列関数で代用できないこともない。
まぁ、UTF-8 だし、正規表現辺りで
$str = preg_replace('/^ | $/u', ''); // UTF-8 以外でこんなことをしてはいけない。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- ASP・SaaS FC2 BLOG <AUDIO TAGを入れプレビューはOk テーンプレートを更新すると ✖ 1 2023/08/14 11:40
- PHP php ログイン 1 2022/11/01 00:24
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptからphpへ変数
-
パスワード認証ページ作りたい...
-
XAMPP1.7.1上でPHPを実行すると...
-
htmlのエラーについて(デバッグ)
-
複数の文字列をファイルに書き...
-
機種依存文字の文字化けについて
-
ローカル環境で動くのに本番環...
-
【file_exists】ファイルが存在...
-
フォントの色を変えるには?
-
C# Excelファイルへの画像挿入。
-
.htaccessにphp_valueが使用できな
-
php で C言語のdefineマクロの...
-
$_SESSION 有効期限をブラウザ...
-
CFileDialogの最初のディレクト...
-
PHP8を使うと、大量のWarningが...
-
onedrive にexcelファイルをア...
-
php界のCPANのような場所はある...
-
form actionで二つ送信先を指定...
-
CentOS5のPHPにMySQLサポートを...
-
C# メール送信ついて困っています
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化けについて
-
日付と年月日を選択するコード...
-
初心者で数当てゲームを作って...
-
htmlのエラーについて(デバッグ)
-
phpの画面表示が真っ白です
-
前後の全角スペースを削除する...
-
XAMPP1.7.1上でPHPを実行すると...
-
mb_convert_variablesで変換出...
-
これまで遷移してきたサイト内...
-
php エラー
-
XMLパースエラー回避方法
-
URLエンコーディングで悩ん...
-
【PHP?】header("location : ...
-
phpでfopen()やfputs()が使えない
-
PHPの勉強中の初心者です。
-
PHPプログラムの間違い
-
php ログイン
-
PHP(smarty)についての質問(文...
-
複数の文字列をファイルに書き...
-
<form action="bbs.php" method...
おすすめ情報