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

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

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

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

Q&A

4回答

3108閲覧

記号が区切り文字になるものを探しています

lazex

総合スコア604

HTML

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

0グッド

2クリップ

投稿2017/02/10 16:51

すごく曖昧な質問になってしまうのですが、たぶん HTML 周りのもので、

「本来の区切り文字ではないが、記号など使えない文字が来たら区切り文字として扱われる」

という仕様(実装がそうなっているだけかも)が何処かにあったと思います。

1,2年程度前にネットで見かけてそうなんだーと思った記憶はあるのですが、試してはないはずで、今回ふとしたキッカケでそれを思い出して試そうと思いました。


class 属性で、 "a;b#c" が "a b c" のようになるのだったかな?
と思って試してみましたが、違うようです。

javascript

1;["a,b", "a|b", "a#b", "a!b"].forEach(className => { 2 document.body.innerHTML = "" 3 4 document.body.append( 5 Object.assign( 6 document.createElement("div"), 7 {className} 8 ) 9 ) 10 11 console.log(className) 12 console.log(document.querySelectorAll(".a").length) 13 console.log(document.querySelectorAll("." + CSS.escape(className)).length) 14})

nohighlight

1a,b 20 31 4a|b 50 61 7a#b 80 91 10a!b 110 121

a だけだとマッチせず、記号も含めた場合にマッチしています。

調べてみたら HTML4 の頃から記号も使えるらしく、最近の変更ということではないようです。

他に区切り文字があって、複数書くことができ、記号が使えない(区切り文字になる)ものが思いつかないのですが、何か心当たりはないでしょうか?

ここ数日気になって調べてるのですが、それらしいものが全然見つかりません。


確実と不確定な部分をわけてまとめると、

・確定

  • 上記で間違いだった class 属性のような、文字列を記述するもの
  • その文字列は何かの文字列で区切ることができる
  • class をスペースで区切るような一般的な区切り文字がある
  • フリーテキストと違って記号など来れないものがある
  • その場合に来れないものが区切りとして扱われる
  • それらは通常は区切りとして用いない
  • それなりに知識がある方と思っていたのに知らなかったので驚いた(絶対的な指標はないですが、初心者ではない分野でそれを知らずに困らなかった、というくらいで考えてもらえばいいです)

・不確定

  • HTML 関係(web関係で、サーバサイドは関係ないはず)
  • 区切り文字はスペースじゃないかも
  • 日本語は区切りになるのか、文字になるか不明
  • 使えない記号がどれか、セレクタみたいな特殊な意味のある記号があったか

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

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

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

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

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

guest

回答4

0

もしかして、これ?


HTMLでは、文字を表すのに「実体参照」を使えます。「&名前;」といった形式の表記です。<のように、HTMLの特殊文字とかぶる文字を表すのによく使いますね。

HTML4までの規格はSGMLに準拠していたので、実体参照の書式もそれに準拠していました。SGMLでは、まぎれがなければ実体参照の最後の;を省略していいことになっています。

そのため、注意しないと問題が起きることがあります。たとえばHTML中に次のような記述があった場合、

html

1<a href="?art&copy">Art and Copy</a> 2

&copy」は、その後に名前に使えない文字"があるため、「copy」という名前の実体参照&copy;として扱われます。その結果この記述は

html

1<a href="?art©">Art and Copy</a> 2

を表すものと解釈できてしまいます。

HTML5からはSGMLに準拠しなくなったので、実体参照の書式があらためられ、最後の;は必須となりました。文書に上記のような記述があれば、構文エラーとなります (HTML5.1, §1.10.2. Syntax errors「Errors involving fragile syntax constructs」.)。

上記の例での正しい方法は、URI中の「&」を次のように実体参照として記述することです。

html

1<a href="?art&amp;copy">Art and Copy</a>

投稿2017/02/11 09:02

編集2017/02/12 15:14
ikedas

総合スコア4317

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

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

lazex

2017/02/12 08:00

へぇー実体参照にはそんな歴史があったんですか。知りませんでした。 ということで探してたものじゃないです。 でもすごくためになりました。 「区切り文字」ですが、 この実態参照やPHPの変数展開で{}がいるか、みたいなタイプのものではなく、複数書くときに分けるための区切り文字だったはずです
ikedas

2017/02/12 15:19

最初は「おまけ」に書いた方の話かな、と思い、裏をとるために調べてHTML5で変わったことに気づきました。セミコロンを省略できたなんて今まで知らなかったよ (実際に実装されていたかどうかは別の話ですが)。勉強になりました。 というコメントまで用意していたんですが、違いますかそうですか(笑)。うーん、なんだろう。
guest

0

過去に見かけたものが何なのかはともかくとして、業務又はシステム仕様に合わせればいいのではないでしょうか。

業務またはシステムで使うデータに出現しない文字または複数の文字から構成される文字列を区切り文字にすればいいと思います。

投稿2017/02/10 22:59

moonphase

総合スコア6621

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

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

lazex

2017/02/12 08:01

作ってるものの仕様で困ってるわけではなく、記憶にあるのに全然見つからなくて気持ち悪い ▶teratailなら知ってる人いるかも。 という意図での質問です
guest

0

ちょっと書いてあることがよくわからなかったので、的はずれな気もしますが、
「本来の区切り文字ではないが、記号など使えない文字が来たら区切り文字として扱われる」
という表現から、DBにおける utf8 の表現を思い出しました。
うまく説明しにくいのですが、絵文字が入ると、それを区切りとして後ろが抜け落ちるというものです。

MySQL で utf8 と utf8mb4 の混在で起きること

参照先もちょっとわかりにくいです^^;
html の内容を php 等で DB から拾ってくる時、接続が utf8 でカラムが utf8 だと、絵文字以降が抜け落ちます。
美味しい????と???? → 美味しい
無くなってしまうので、区切りではないかもしれないですが^^;

utf8 と utf8mb4 との比較で調べると、もう少し詳しい内容が確認できます。

投稿2017/02/10 22:55

編集2017/02/10 23:16
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

lazex

2017/02/12 08:03

それ聞いたことあります。 ただ今回探してるものとは違います。 DB関係は全く関係ないはずです。
guest

0

Google 検索のキーワードとかじゃないですか?
曖昧な表記を許すならプログラミングなどの機械向け言語の仕様ではなく人間向けだと思います。

投稿2017/02/10 18:04

Zuishin

総合スコア28660

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

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

lazex

2017/02/12 08:05

人が書くものではなく、プログラム的なものです。これは確信あります。 ただ決められたキーワードから選んで書くのではなく、変数名やクラス名みたいな自分で名前つけることはできたように思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問