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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

603閲覧

タグの保存において、ユーザーが意図したハイフンか、そうでないハイフンかを見分ける方法

japaridark

総合スコア13

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

0クリップ

投稿2019/03/21 18:17

編集2019/03/21 18:23

タグの保存方法についてお尋ねします。
###質問したいこと
ユーザー登録可能なタグがあります。
この保存と出力の仕組みについて悩んでいます。
下記≪目的≫の処理のための流れを教えてください。

≪現状≫
ユーザーがタグにスペースを登録したら、「スペースはハイフンに変換する」という処理がされる。

≪目的≫
ユーザーがタグにスペースを登録したら、「URLとしてはハイフンに変換するけど、表示するときはスペースのまま」という処理がされる。

###例
たとえば次のタグをユーザーが登録したとします。
burgerking whopper-cheese

スペースがあるとURLとして使えませんのでこうなります。
burgerking-whopper-cheese

すると次の疑問が生じます。

ユーザーが意図したハイフンか、そうでないハイフンかを見分ける方法です。

burgerking whopper-cheeseと入力され、それがURLのために
burgerking-whopper-cheeseと登録されるとき、
burgerkingwhopperの間の-は、
URLのために自動で付与されたハイフンであり、
これは「タグ一覧リスト」を表示するときに削除したいです。
ユーザーが意図して入力したものではないからです。

しかしwhoppercheeseの間の-は、
ユーザーが意図して入力したハイフンであり、
これは「タグ一覧リスト」を表示するときにもそのまま表示したいです。

このような区別**(ユーザーが意図したハイフンか、そうでないハイフンかを見分ける方法)**のためにはどうしたらよろしいでしょうか?

よろしくお願い致します!

dotnetuseryamag👍を押しています

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

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

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

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

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

m.ts10806

2019/03/21 21:21

ここで質問者さんが定義されてる「タグ」とはなんでしょうか 質問者さんが作るものの仕様は質問者さんしか知らないわけで。 現状のコードや具体的に起きた現象でも提示されればまだ良いのですが
guest

回答3

0

ベストアンサー

スペースがあるとURLとして使えません

いえ、使えます。(URL文字列上にスペースではなくスペースを意味することは出来ます)
URLエンコードしてください。

【PHP: urlencode - Manual】
http://php.net/manual/ja/function.urlencode.php

【PHP: rawurlencode - Manual】
http://php.net/manual/ja/function.rawurlencode.php

【URLが空白を含むときは「スペース」と「%20」、「+」のどれを使うべきか? | 海外SEO情報ブログ】
https://www.suzukikenichi.com/blog/which-shold-you-use-space-20-or-plus-in-urls-containing-space/

【URL Encoding】
http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

投稿2019/03/21 18:25

kei344

総合スコア69407

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

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

japaridark

2019/03/22 10:44

使えるんですね。知りませんでした。多くのリンク先をありがとうございます。それぞれ見てまいります。
退会済みユーザー

退会済みユーザー

2019/03/22 11:45

ここの回答で完全に解決するはずなんだけど質問者は何を悩んでるんだろう。
japaridark

2019/03/22 11:53

解決するとは思うんですけど、できればスペース(%20など)は使いたくないんです。するとBernadotteさんがおっしゃる置換か、Yousuckさんがおっしゃる2種類のデータを用意するかになりまして、今は置換の方で話を進め、悩んでいるところです。
guest

0

key344さんが書かれている通り、URLエンコードをすれば解決しそう内容ですが、取得した値にスペースが含まれていると都合が悪いとあえて解釈をして、新米プログラマのプログラムなのでスマートではないですが、以下はどうでしょうか。

sample.php

1 2<?php 3/** ユーザー入力のハイフン[-]を置換またはURLエンコード 4 * @param string $input 5 * @param array $options urlencode | replace 6 * @return string $output 7 */ 8function input_user_used_hyphen($input, $options=[]) 9{ 10 $input = isset($input) && !empty($input) ? $input : ''; 11 if (isset($options) && !empty($options)) { 12 $urlencode = !empty($options['urlencode']) ? true : false; 13 $replace = !empty($options['replace']) ? true : false; 14 } 15 $output = ''; 16 17 if ($urlencode) { 18 // インプットをエンコード 19 $output = urldecode($input); 20 } 21 22 if ($replace) { 23 // ユーザー入力のハイフン[-]を一時的にイコール[=]に置換 24 $output = str_replace('-', '=', $input); 25 // ユーザー入力のスペース[ ]をハイフン[-]に置換 26 $output = str_replace(array(' '/* 半角 */, ' ' /* 全角 */), '-', $input); 27 } 28 29 return $output; 30} 31 32if ($_SERVER['REQUEST_METHOD'] == 'GET') { 33 // input:value表示用? 34 $user_input = $_GET['user_input']; 35 // なにか頭に利用する 36 $user_input_processing = input_user_used_hyphen($user_input, 'replace'); 37 38 // これ以降に処理を書いていく感じ 39}

置換した部分を元に戻したい場合は、それ用のファンクションを用意する必要があります。
動作検証したわけではないので、動作保証はいたしませんのであしからず。

投稿2019/03/22 01:54

編集2019/03/22 01:57
Bernadotte

総合スコア310

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

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

japaridark

2019/03/22 10:41

ありがとうございます。勉強になりました。 それですと、置換した部分を元に戻すときに問題がありそうに思います。イコールがあったらハイフンに戻しますよね?でももしユーザーがイコールを入力してたら、そのイコールまでハイフンになって表示されてしまうことになりませんか? 入力「burgerking whopper-cheese=delicious」 ↓ 登録「burgerking-whopper=cheese=delicious」 ↓ 表示「burgerking whopper-cheese-delicious」 のように。
Bernadotte

2019/03/22 10:53

「delicious」のワードが増えてるんですね。 置換の順番にもよるかと思います。 // わかりやすく置換される部分を「」で囲います。 入力時:ハイフンをイコールに置換 → burgerking whopper「=」cheese 登録時:スペースをハイフンに置換 → burgerking「-」whopper=cheese 出力時1:ハイフンをスペースに置換 → burgerking「 」whopper=cheese // わかりやすいように全角スペースにしています。 出力時2:イコールをハイフンに置換 → burgerking whopper「-」cheese 置換する手間が増えるので、スマートとはいえない泥臭いやり方にはなってしまうかと思います。 なので、タグ用データと入力表示用データの2つ用意しておくのが無難なのかなとは思いますが、用途に合わせての判断になるのではないでしょうか。
japaridark

2019/03/22 11:39 編集

タグ用データと入力表示用データの2つ用意する方法はかなり見当がつかないので、置換でできればとは思っています。 さて、置換の順番によってこの問題が解決されるとのことですが、なぜですか? 登録されたデータにこうあったとしますよね。 burgerking「=」whopper「=」cheese これを出力するときに、2つあるイコールのうち、「ユーザーが意図したイコール」と「ハイフンから置換されたイコール」を見分ける術はないのでは? なので次のどれを出力すべきか、判断できないと思うのですが。 burgerking「-」whopper「-」cheese burgerking「-」whopper「=」cheese burgerking「=」whopper「-」cheese burgerking「=」whopper「=」cheese 上のどれを入力しても「登録時にはハイフンがイコールに置換される」という処理が入るため、登録されたデータはこうなるはずなので。 burgerking「=」whopper「=」cheese 置換の順番によってなぜこの見分けができるのか、大変お手数おかけして申し訳ございませんが、もしよろしければご説明願えませんでしょうか。
Bernadotte

2019/03/22 11:52

最初に要件として定義されていたのが「ユーザーが意図したハイフンか、そうでないハイフンかを見分ける方法です。」とありましたので、ハイフンが起点になるかと考えたのですが、これは要件がまだ複数あって、上記では満たされないということでしょうか? そうなりますと、提示しています実装方法は使えなくなるまたは変更を余儀なくされます。 「確実に見分けられたい」とされるのでしたら、入力時に[タグの区切り文字はスペースのみを許可][文字の接続詞にはハイフンだけを許可]といった形に制限をいれることでも実現はできるのではないでしょうか。 ユーザビリティは下がりそうですが。 あんまりいい手とは言えないですが、スペースを「[space]」として文字列に置換してもいいわけです。 そうすれば、ユーザーが接続詞として「ハイフン」を使おうが「イコール」を使おうが、ここの部分は置換せずにおいても問題はなくなるのではないでしょうか?
japaridark

2019/03/22 12:05

あぁ理解できました。ありがとうございました。
guest

0

登録時(入力されたままの)データも持っておいて
何かあるごとに2つを比較すれば良いのではないでしょうか。

投稿2019/03/22 01:13

Yousuck

総合スコア349

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

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

japaridark

2019/03/22 10:43 編集

やはりそれしかないでしょうかね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問