質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

393閲覧

PHP 全角と半角の空白を削除したい。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/03/14 07:45

編集2019/03/14 09:22

実現したいこと。

和歌山市  海南市  有田市  御坊市  田辺市  湯浅町  和歌山広川町  有田川町  和歌山日高町  由良町  みなべ町  日高川町
  を削除して
和歌山市,海南市,有田市,御坊市,田辺市,湯浅町,和歌山広川町,有田川町,和歌山日高町,由良町,みなべ町,日高川町
このようにしたい。

試したこと

php

1//※phpQuery-onefile.phpを利用しています。 2//※「pq($item)->text()」は- 3//「和歌山市  海南市  有田市  御坊市  田辺市  湯浅町  和歌山広川町  有田川町  和歌山日高町  由良町  みなべ町  日高川町」-  4//が入っています。 5 6preg_replace("/( | )/", ",", pq($item3)->text()); 7 8//結果- 9//「和歌山市, 海南市, 有田市, 御坊市, 田辺市, 湯浅町, 和歌山広川町, 有田川町, 和歌山日高町, 由良町, みなべ町, 日高川町」 10//全角は削除されるが、半角は削除されない。 11 12str_replace(" ", ",", pq($item3)->text()) 13 14//結果- 15//「和歌山市  海南市  有田市  御坊市  田辺市  湯浅町  和歌山広川町  有田川町  和歌山日高町  由良町  みなべ町  日高川町」 16//変化なし。 17 18str_replace(" ", ",", pq($item3)->text()) 19 20//結果- 21//「和歌山市, 海南市, 有田市, 御坊市, 田辺市, 湯浅町, 和歌山広川町, 有田川町, 和歌山日高町, 由良町, みなべ町, 日高川町」 22//全角は削除されるが、半角は削除されない。 23 24ここの震度4部分を取得しています。※table 25https://typhoon.yahoo.co.jp/weather/jp/earthquake/20190313134857.html 26 27//--全体コード 28//https://typhoon.yahoo.co.jp/weather/jp/earthquake/20190313134857.html ここの震度部分を取得しています。(table) 29require_once('phpQuery-onefile.php'); 30 31$MainDom = GetDom("https://typhoon.yahoo.co.jp/weather/jp/earthquake/20190313134857.html"); 32$str = ""; 33 34foreach(pq($MainDom)->find(".yjw_table")->find("table") as $item){ 35 foreach(pq($item)->find("tr") as $item2){ 36 foreach(pq($item2)->find("td:eq(1)")->find("small") as $item3){ 37 $str .= preg_replace("/( | )/", ",", pq($item3)->text()); 38 } 39 } 40} 41echo $str; 42 43function GetDom(String $url){ 44 return phpQuery::newDocument(file_get_contents($url)); 45} 46 47//結果 48//「和歌山市, 海南市, 有田市, 御坊市, 田辺市, 湯浅町, 和歌山広川町, 有田川町, 和歌山日高町, 由良町, みなべ町, 日高川町...中土佐町, 黒潮町,」 49//半角だけが削除されない。

補足情報(FW/ツールのバージョンなど)

phpQuery-onefile.phpを利用しています。
XAMPPで動かしています。

#最後に
phpQuery-onefile.phpに問題がある気もします...。
もしよろしければ、ご伝授下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryu22e

2019/03/14 08:08

サンプルコードの「preg_replace("/( | )/", "", pq($item)->text());」の第2引数は本当に実際のコードと同じですか? これだとカンマに変換されないので、コメントに書かれている出力結果にもならないような気がします。
退会済みユーザー

退会済みユーザー

2019/03/14 08:56

本当に申し訳ないです。 正しくは、 preg_replace("/( | )/", ",", pq($item3)->text()); です。
guest

回答3

0

preg_replaceでできてますけどね。
https://paiza.io/projects/_f42aKtnQANdZAv1QVRxFw

あと、結果のところ処理内容と一致してません。
1つめと2つめの結果が逆?

追加
カンマに置換しないといけないのですね。失礼しました。
空白が必ず全角半角の順であるなら、こんなのでいいのでは。

PHP

1echo preg_replace("/(  )/", ",", pq($item3)->text());

投稿2019/03/14 08:09

編集2019/03/14 08:14
ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/14 09:00

カンマの後ろに半角がついてしまいます。 「和歌山市, 海南市, 有田市, 御坊市, 田辺市, 湯浅町, 和歌山広川町, 有田川町, 和歌山日高町, 由良町, みなべ町, 日高川町」
退会済みユーザー

退会済みユーザー

2019/03/14 09:09

カンマの後ろに半角がついてしまいます。 「和歌山市, 海南市, 有田市, 御坊市, 田辺市, 湯浅町, 和歌山広川町, 有田川町, 和歌山日高町, 由良町, みなべ町, 日高川町」 追記- $str = pq($item3)->text(); $str = preg_replace("/(  )/", ",", pq($item3)->text()); echo $str; この場合だと半角が残ってしまいます...。 $strの文字列が特殊なのかもしれません。
ttyp03

2019/03/14 09:19

別の文字なんじゃなかろうか・・・ 全角が残るのなら文字コードが違ってたりという場合があるけど、半角スペースは文字コードは影響しないと思うので。
退会済みユーザー

退会済みユーザー

2019/03/14 09:24

そうですよね...。 全体コードも追記しました。
guest

0

PHP

1$str = pq($item3)->text(); 2$str = str_replace(' ', '', $str);//全角空白を削除 3$str = str_replace(' ', '', $str);//半角空白を削除

こうしてみては?

投稿2019/03/14 08:04

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/14 09:01

「和歌山市 海南市 有田市 御坊市 田辺市 湯浅町 和歌山広川町 有田川町 和歌山日高町 由良町 みなべ町 日高川町」 半角が消えません...。
guest

0

ベストアンサー

PHP

1$str="和歌山市  海南市  有田市  御坊市  田辺市  湯浅町  和歌山広川町  有田川町  和歌山日高町  由良町  みなべ町  日高川町"; 2$pattern="/(\xE3\x80\x80|\x20)+/u"; 3print preg_replace($pattern,",",$str);

投稿2019/03/14 08:54

yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/14 08:58

「和歌山市, 海南市, 有田市, 御坊市, 田辺市, 湯浅町, 和歌山広川町, 有田川町, 和歌山日高町, 由良町, みなべ町, 日高川町」 ", "このようにカンマの後ろに半角がついてしまいます。
yambejp

2019/03/14 09:41

いえ、付きませんね。もしついているなら 半角スペースではないなにか別の文字では? tabとか とか・・・
退会済みユーザー

退会済みユーザー

2019/03/14 09:46

そうですよね...。 コード全体も追記したのでもしよろしければ、見て下さい。
yambejp

2019/03/14 10:00

preg_replace("/( | )/" じゃだめですよ
退会済みユーザー

退会済みユーザー

2019/03/14 10:16

yambejp さんのやり方でもやりましたが、やはり半角だけが残ります...。
yambejp

2019/03/14 10:25

仮に $pattern="/(\xE3\x80\x80|\s)+/u"; でもおなじですか?
退会済みユーザー

退会済みユーザー

2019/03/14 10:26

今色々やってみたのですが、explode関数で配列にしてみた所、半角がなくなりました! ご丁寧にありがとうございました。
ttyp03

2019/03/14 10:33

解決方法全然違うやんけ
stdio

2019/03/14 12:03

解決法が「∑q|゚Д゚|pワオォ」状態になってますね...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問