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

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

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

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

JavaScript

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

HTML

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

Q&A

解決済

3回答

1016閲覧

クロスサイトスクリプティング対策でhtmlspecialchars関数の引数で「SJIS-win」だとデータが抽出できない

eisaku123

総合スコア77

PHP

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

JavaScript

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

HTML

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

0グッド

1クリップ

投稿2024/05/21 02:57

実現したいこと

SJIS-winでもデータが抽出できるようにしたい。髙(はしごだか)対策をしたいため

HTML

1<textarea id="filename" rows="4" cols="50" hidden> 2<?php echo htmlspecialchars($_SESSION['filename'], ENT_QUOTES, 'SJIS-win'); ?> ここ!!! 3</textarea>

発生している問題・分からないこと

UTF-8だと上手くいきますが、SJIS-winだとデータが抽出できない

HTML

1<textarea id="filename" rows="4" cols="50" hidden> 2<?php echo htmlspecialchars($_SESSION['filename'], ENT_QUOTES, 'SJIS-win'); ?> ここ!!! 3</textarea>

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

サポートはされているようです。

イメージ説明

補足

事前にデータを作成する際に
mb_convert_encoding($value, "SJIS-win", "UTF-8");を実施してます。

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

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

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

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

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

guest

回答3

0

ベストアンサー

UTF-8を使えばいいと思います。また使うべきだと思います。

髙(はしごだか)対策をしたいため

今我々が見ているこのページもUTF-8で符号化されているのですが。上の文では「髙」が正常に表示されていますよね。

「梯子高が文字化けしないようにするためにCP932 (SJIS-Win) を使う」というのはちょっと昔の情報です。

現在はほとんどの環境でUTF-8などのユニコードに準拠した文字コードを使うことが一般化していますから、梯子高 (髙) や立崎 (﨑)などはもちろん、地球上で使われている漢字の大半を扱えます (漢字を表示できるフォントが必要ですが)。
——というより、現在のHTML標準ではHTMLコンテンツの文字エンコーディングは原則としてUTF-8を使うので、HTMLとして出力されるデータの文字コードに強いてUTF-8以外を使う理由がありません。

現在では、Shift_JISと互換性のある文字コードしか使えないような古いシステムでの処理の必要があるとき以外は、SJIS-Winなどを持ち出さなくていいです。

投稿2024/05/21 09:41

ikedas

総合スコア4443

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

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

yambejp

2024/05/21 09:47

UTF8への過信は禁物です、いまだにエクセルはUTF8のCSVを無手順では正しく表示できません
ikedas

2024/05/21 09:53

そういう特殊環境ではそれに合わせた処理が必要でしょう。この質問の対象はCSVのデータではありませんし、特定のベンダのコードページを前提として動作しているシステムでもありません。
eisaku123

2024/05/21 12:16

ikedasさん、考え方を教えていただきありがとうございます。 実はエクセルのCSVで髙は文字化けをして、苦情が出たためSJIS-Winにこだわっています。 背景をもっと詳しく説明してなく申し訳ございません。
ikedas

2024/05/21 12:27

それはCSVに出力するときに考えればいいことで、HTMLに出力する場合はUTF-8にしておけば文字化けしません。 というか、今ではGoogle ChromeのようにUTF-8でないページは文字化けするというブラウザも普通なので、HTMLで表示する文字コードはUTF-8にしておかないと苦情が出るかもしれないと思いますよ。PHP自体もUTF-8以外の文字コードで出力するように作ろうとするといろいろ面倒なことが起きそうですし。
eisaku123

2024/05/22 00:47

>CSVに出力するときに考えればいいことで とは、エクセル開いてエクセルで設定しなおすということでしょうか?
Lhankor_Mhy

2024/05/22 01:23

横からすみません。 ikedas さんは是々非々で考えましょう、とおっしゃってると思います。 たとえば、CSVの場合はBOMを付ければ普通にexcelで開けるなど、何らかの回避手段がある場合もあります。 なにか対応すべき事象があった時に、どう対応すればいいのかそれぞれで考えればいいだけで、全体としてはutf-8で作るのがベターですよ、という話だと思いますし、私も同意です。
ikedas

2024/05/22 03:06

Lhankor_Mhyさんありがとうございます。 eisaku123さん、CSVのことはこの質問の趣旨と離れると思うので、必要なら別に質問を立てられてはどうですか。
eisaku123

2024/05/22 11:09

ikedasさん >CSVのことはこの質問の趣旨と離れると思うので、必要なら別に質問を立てられてはどうですか。 に関しては質問を立てるかどうか、検討します。
guest

0

多分質問者さんの環境は極ノーマルな状態でdefault_charset = UTF-8なのでしょう。
マニュアルには
「すべてのバージョンの PHP は、PHP から送信する Content-Type ヘッダのデフォルト値としてこれを使います。 」
とあります。
なので、PHPから出力する際には、(デフォルトとは違うので)

PHP

1header("Content-Type: text/html;charset=Shift_JIS");

が必要なのでは?

手元の環境(PHP8.3.7)で確認したら、htmlspecialchars($val, ENT_QUOTES, 'Shift_JIS'はキチンと出力されました。

PHP

1<?php 2$src = '<div>髙</div><p>﨑</p>'; 3$val = mb_convert_encoding($src, "SJIS-win", "UTF-8"); 4header("Content-Type: text/html;charset=Shift_JIS"); 5?> 6<!DOCTYPE html> 7<html lang="ja"> 8<head> 9<meta charset="Shift_JIS"> 10<title></title> 11</head> 12<body> 13<?php echo htmlspecialchars($val, ENT_QUOTES, 'Shift_JIS'); ?> 14</body> 15</html>

投稿2024/05/22 04:12

tezcello

総合スコア434

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

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

eisaku123

2024/05/22 11:11

アドバイスありがとうございます。
tezcello

2024/05/22 11:32

結構簡単な方法で解決出来たと思います。 後はCSVでの出力でしょうが、他の方が仰る様に出力時に丸ごとBOM付きUTF-8にするか、Shift_JIS(SJIS-win)にするだけなので、そちらも大した問題ではないと思います。
guest

0

UTF-8だと上手くいきますが、SJIS-winだとデータが抽出できない

であれば「UTF-8」を指定すればいいだけでは?

参考

※調整

php

1$entities=<<<eof 2<hoge>てすと髙<fuga> 3eof; 4$encodings = [ 5 "ASCII", 6 "SJIS-win", 7 "UTF-8", 8 "cp51932, 9]; 10$encoding=mb_detect_encoding($entities,$encodings); 11$str= mb_encode_numericentity( $entities, array( 0x0, 0xffff, 0, 0xffff ), $encoding ) ; 12print <<<eof 13<textarea rows="4" cols="50"> 14$str 15</textarea> 16eof;

投稿2024/05/21 03:17

編集2024/05/21 07:39
yambejp

総合スコア117615

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

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

eisaku123

2024/05/21 03:32

アドバイスありがとうございます。 UTF-8だと髙(はしごだか)が文字化けしませんか?
yambejp

2024/05/21 04:27 編集

「UTF-8だと上手くいきます」ではなかったのでしょうか? mb_encode_numericentityのサンプルつけてあります
eisaku123

2024/05/21 05:12

上記のサンプルの提案ありがとうございます。 しかし結果は以下のようになります。 <hoge>縺ヲ縺吶→鬮?fuga>
yambejp

2024/05/21 05:17 編集

それは元のエンコードと指定しているエンコードが違うのでしょう おそらくUTF8のソースをSJIS-winに変換しています。 そのソースなら$encodingにUTF-8を指定してください
eisaku123

2024/05/21 05:35

>ソースなら$encodingにUTF-8を指定してください 上手くいきました。
eisaku123

2024/05/21 05:50

そうすると、例えば、新しい***.phpを作成するときにShift_JISに変換するところから始めれ良いのでしょうか?
yambejp

2024/05/21 07:45 編集

> Shift_JISに変換するところから サンプル調整しました。 $encodingは自動判断すればよいです ※ただし少ない文字列からdetectすると誤判断される場合もあるので注意
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問