<?xml version="1.0" encoding="UTF-8"?><feed
	xmlns="http://www.w3.org/2005/Atom"
	xmlns:thr="http://purl.org/syndication/thread/1.0"
	xml:lang="ja"
	>
	<title type="text">ウダ2Blog</title>
	<subtitle type="text">大阪でフリーランスとしてWEB制作している管理人が気になった技術をメモったり、作ったツールの紹介などを綴っているブログです。</subtitle>

	<updated>2025-11-13T10:48:22Z</updated>

	<link rel="alternate" type="text/html" href="https://uda2.com/blog" />
	<id>https://uda2.com/blog/feed/atom/</id>
	<link rel="self" type="application/atom+xml" href="https://uda2.com/blog/feed/atom/" />

	<generator uri="https://wordpress.org/" version="6.9">WordPress</generator>
	<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[PDFからコピペした文字が微妙に変になったら]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/jpnormalizer/" />

		<id>https://uda2.com/blog/?p=2867</id>
		<updated>2025-11-13T10:48:22Z</updated>
		<published>2025-11-13T06:59:41Z</published>
		<category scheme="https://uda2.com/blog" term="制作日記" /><category scheme="https://uda2.com/blog" term="Github" /><category scheme="https://uda2.com/blog" term="JavaScript" /><category scheme="https://uda2.com/blog" term="PHP" />
		<summary type="html"><![CDATA[<p>PDF内のテキストをコピペすると一部の漢字が「⾯」のように少し小さくひしゃげてしまう事がある。これは康熙部首やCJK部首補助という本来は部首を示す漢字に誤変換（？）されるらしい。過去に書いたUTF-8-MAC（NFD）の</p>
The post <a href="https://uda2.com/blog/jpnormalizer/">PDFからコピペした文字が微妙に変になったら</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/jpnormalizer/"><![CDATA[<p>PDF内のテキストをコピペすると一部の漢字が「⾯」のように少し小さくひしゃげてしまう事がある。<br>これは<a href="https://ja.wikipedia.org/wiki/%E5%BA%B7%E7%85%95%E9%83%A8%E9%A6%96" target="_blank" rel="noopener" title="康熙部首">康熙部首</a>や<a href="https://ja.wikipedia.org/wiki/CJK%E9%83%A8%E9%A6%96%E8%A3%9C%E5%8A%A9" target="_blank" rel="noopener" title="">CJK部首補助</a>という本来は部首を示す漢字に誤変換（？）されるらしい。<br>過去に書いた<a href="https://uda2.com/blog/mac_filename/" title="">UTF-8-MAC（NFD）の問題</a>も含めて対策した日本語をノーマライズするライブラリを作ってみました。<br><a href="https://github.com/uda2/jpnormalizer" target="_blank" rel="noopener" title="">https://github.com/uda2/jpnormalizer</a></p>



<span id="more-2867"></span>



<p>いづれも「読め無いわけでは無いからそのままでええやん」って感想の人も多いかもしれないですがWindowsのファイル名にUTF-8-MACを使うと一部のソフトで不都合が起きたりスクリプトで検索の際に別の文字なのでヒットしないという問題が発生しますので、マックユーザー向けにファイルアップロード機能を付けるときやPDFの内容をコピペする可能性の高いフォームでは有用かと思います。</p>



<p>言語はJavascript版とPHP版を用意しています。<br>中味はWikipedia等で情報を集めて置換してるだけですが、最初にテキストに該当箇所が無ければ変換処理をしないので負荷は低いかと思います。</p>



<p>Javascriptの方はnormalizeという関数が用意されていて<br>UTF-8-MAC問題だけなら.normalize(&#8220;NFC&#8221;)、康熙部首も変換したいなら.normalize(&#8220;NFKC&#8221;)と実行すると変換可能でネイティブな分処理的には速いのですが<br>多言語用の不必要な文字も変換されてしまうのに、CJK部首補助が変換されないという<br>濁音半濁音だけでなく全ての言語を正規化するので結果負荷が多めなので自前で用意しています。</p>



<p>PHPの方もNormalizer::normalize()があり、php-intlをインストールするか有効化すると使えるが<br>Javascriptnormalize関数と同様に多言語対応のライブラリで冗長なので自前で変換テーブルを用意して変換しています。</p>



<p>Githubとかいいから使ってみたいって方のためにお試し版も用意してます。<br><a href="https://uda2.com/github/jpnormalizer_sample.php">https://uda2.com/github/jpnormalizer_sample.php</a></p>



<p>※UTF-8-MAC（NFD）の問題はMacのファイルシステムがHFS+からAPFSになってかなり減ってます。<br>※NFCの変換するなら半角→全角も組み込んでも良さそうですがAA（アスキーアート）とかで使うので敢えて入れてません。</p>



<p></p>The post <a href="https://uda2.com/blog/jpnormalizer/">PDFからコピペした文字が微妙に変になったら</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/jpnormalizer/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/jpnormalizer/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[ChatGPTとGeminiで15キャラ生成]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/udatool/" />

		<id>https://uda2.com/blog/?p=2860</id>
		<updated>2025-09-03T13:03:44Z</updated>
		<published>2025-09-03T13:03:43Z</published>
		<category scheme="https://uda2.com/blog" term="制作日記" /><category scheme="https://uda2.com/blog" term="ChatGPT" /><category scheme="https://uda2.com/blog" term="Gemini" /><category scheme="https://uda2.com/blog" term="生成AI" />
		<summary type="html"><![CDATA[<p>自分では結構使っているけれど、他の人にはほとんど使われていないWEBツール集「ウダツール」。その改善点をManusに考えてもらったところ、提案の一つに「各ツールのアイコンやサムネイル画像を作成し、視覚的に分かりやすくする</p>
The post <a href="https://uda2.com/blog/udatool/">ChatGPTとGeminiで15キャラ生成</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/udatool/"><![CDATA[<p>自分では結構使っているけれど、他の人にはほとんど使われていないWEBツール集「ウダツール」。その改善点を<a href="https://manus.im/" target="_blank" rel="noopener nofollow" title="Manus">Manus</a>に考えてもらったところ、提案の一つに「各ツールのアイコンやサムネイル画像を作成し、視覚的に分かりやすくする」というものがありました。<br>ただ、アイコンにビジュアル化するのは難しく、「生成AIで擬人化しようかな」と思いつつも「今のデザインと合わなくなるな…」と躊躇していました。 そんな時にスマホゲーム「ACE Craft」にインスパイアを受け、レトロなカートゥーン風でキャラクター化することに決めました。<br><br><a href="https://tools.uda2.com" target="_blank" rel="noopener" title="">https://tools.uda2.com</a></p>



<span id="more-2860"></span>



<p>まず、各コンテンツの概要を<a href="https://chatgpt.com/?locale=ja-JP" target="_blank" rel="noopener nofollow" title="">ChatGPT</a>に送ってキャラ設定の案を作成。それを叩き台にして実際の設定を固めました。下記のように動物の種別でグループ分けしています。</p>



<ul class="wp-block-list">
<li>画像変換系 → 犬</li>



<li>フォント系 → ネコ</li>



<li>ソート系 → 鳥</li>



<li>テキスト変換系 → 爬虫類</li>
</ul>



<p>キャラ設定がまとまったら、再びChatGPTにプロンプト作成を依頼。日本語でも良かったのですが、今回はレトロカートゥーン風ということもあり、英語でのプロンプトを採用しました。（ただし、プロンプトは荒ぶることも多いので、手直しは必須です）</p>



<p>画像生成は<a href="https://gemini.google.com/" target="_blank" rel="noopener nofollow" title="">Google Gemini</a>にお願いしました。Geminiはカートゥーン調のイラストが得意で、しかも生成回数も多いのが魅力。<br>もちろん、実際には色の塗り直しや合成、サイズ調整、不自然な文字や描き込みの削除など多少の修正は必要です。それでも、15体ものキャラクターを一日で作れてしまうなんて、本当にすごい時代になったもんだ。</p>



<p></p>The post <a href="https://uda2.com/blog/udatool/">ChatGPTとGeminiで15キャラ生成</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/udatool/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/udatool/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[SQLをMarkdownに変換]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/sql2md/" />

		<id>https://uda2.com/blog/?p=2853</id>
		<updated>2025-08-24T13:44:54Z</updated>
		<published>2025-08-24T13:44:53Z</published>
		<category scheme="https://uda2.com/blog" term="制作日記" /><category scheme="https://uda2.com/blog" term="JavaScript" /><category scheme="https://uda2.com/blog" term="markdown" /><category scheme="https://uda2.com/blog" term="SQL" />
		<summary type="html"><![CDATA[<p>共同制作をあまりしてこなかったのでドキュメントが散らかりがちでだったのですがAIの力で過去に作ったものもドキュメント化していってます。データベースの構造をドキュメント化するにあたり、今まではエクセルなどの表計算ソフトでデ</p>
The post <a href="https://uda2.com/blog/sql2md/">SQLをMarkdownに変換</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/sql2md/"><![CDATA[<p>共同制作をあまりしてこなかったのでドキュメントが散らかりがちでだったのですがAIの力で過去に作ったものもドキュメント化していってます。<br>データベースの構造をドキュメント化するにあたり、今まではエクセルなどの表計算ソフトでデータベースの構造を残してたのですが、AIによると下記の3つに残すのが小規模な一般的な個人開発の一般的な方法らしい。</p>



<ul class="wp-block-list">
<li>schema.sql（CREATE TABLEを全部書いたDDL（最終仕様のソース））</li>



<li>tables.md（テーブル定義書（上記の表形式でMarkdown化））</li>



<li>erd.png（ER図のスクショ）</li>
</ul>



<p>schema.sqlは｀<code>mysqldump -u ユーザー名 -p --no-data データベース名 > schema.sql</code>｀でみたいな形で簡単に書き出せる。<br>erd.pngはtables.mdがあれば<a href="https://dbdiagram.io" target="_blank">dbdiagram.io</a>のようなWEBツールで作成できる。</p>



<p>あとはschema.sqlをtables.mdに変換しできれば最低限の形が整うのですが変換ツールが見つからなかったので作ってみた。<br><a href="https://tools.uda2.com/sql2md.html" target="_blank" rel="noopener" title="">https://tools.uda2.com/sql2md.html</a></p>



<p>とはいえ、コアな部分はAI（Claude）に作ってもらったので特に書くことは無い。<br>（しかも、今回のこの記事はカバー画像もAI（chatGPT）に作ってもらった。）<br>私がしたのは軽い修正とウダツールスのパッケージに収めただけです。<br></p>



<p></p>The post <a href="https://uda2.com/blog/sql2md/">SQLをMarkdownに変換</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/sql2md/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/sql2md/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[Webp変換 with AVIF]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/webpconv/" />

		<id>https://uda2.com/blog/?p=2843</id>
		<updated>2025-07-25T14:19:05Z</updated>
		<published>2025-07-25T13:57:33Z</published>
		<category scheme="https://uda2.com/blog" term="制作日記" /><category scheme="https://uda2.com/blog" term="AVIF" /><category scheme="https://uda2.com/blog" term="JavaScript" /><category scheme="https://uda2.com/blog" term="WEBP" />
		<summary type="html"><![CDATA[<p>WebP画像を作るたびにいちいちPhotoshopを立ち上げるのが面倒なのでChatGPTに相談しながら変換ツールを作成しました。WebpだけでなくAVIFにも対応して、ブラウザ上で変換し、複数ファイルはzipファイルに</p>
The post <a href="https://uda2.com/blog/webpconv/">Webp変換 with AVIF</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/webpconv/"><![CDATA[<p>WebP画像を作るたびにいちいちPhotoshopを立ち上げるのが面倒なのでChatGPTに相談しながら変換ツールを作成しました。<br>WebpだけでなくAVIFにも対応して、ブラウザ上で変換し、複数ファイルはzipファイルにまとめてダウンロードもできます。<br><a href="https://tools.uda2.com/webpconv.html" target="_blank" rel="noopener" title="">https://tools.uda2.com/webpconv.html</a></p>



<span id="more-2843"></span>



<p>大抵のブラウザでWebpの表示はできるようになったが流石に生成は無理だろうからPythonでもいいから作ってくれないかと思ってChatGPTに聞いたらさくっとブラウザで動作するものを作ってくれた。昨今のブラウザは表示はもちろんで作成もできるるらしい。<br>そこから、見た目を他のツールと統一感を持たせて、操作感をいい感じに整えるのに半日ほどかけて調整。AIのおかげで個人的に使う分にはすぐに作成できるけど、公開するレベルのものとなるといまだ時間はかかってしまう。</p>



<p>そんな中、ChatGPTが「AVIF形式にも対応できますよ」と提案してきたので試してみた。けれど、いざ実行するとPNGに変換されたり、拡張子だけAVIFに変えて実体はPNGのままだったりと、おかしな挙動が出てきた。修正を頼んでもうまくいかず、Geminiにも相談してみた。</p>



<p>Geminiの方は「canvas.toBlob(…, &#8216;image/avif&#8217;)」によるAVIF出力の対応状況を尋ねても、「Safari以外の主要ブラウザではサポートされています」と返ってくる。けれど、実際にはうまく動かない。出力対応と表示対応を混同していたり、ソースを出しても「表示」対応の話ばかり。Geminiとは1時間近くやり取りしてもハレーションがひどくなる一方で埒が開かない。</p>



<p>結局もう一度ChatGPTに戻って聞き直してみたところ、「現時点では、主要ブラウザはAVIFの表示には対応しているが、canvas.toBlob(…, &#8216;image/avif&#8217;)による出力には未対応」との結論に。真偽は不明だけど、自分の環境でも正常に出力できなかったので「現時点でAVIFの出力に対応したブラウザは無い」という事にした。</p>



<p>代替手段としてChatGPTが提示してきたのが、avif.js（@jsquash/avif）というライブラリ。これはGoogle製のAVIFエンコーダー「libavif」をWebAssembly（WASM）化したもので、クライアントサイドだけでAVIF変換を行うことが可能らしい。</p>



<p>ただし、これも一筋縄ではいかない。最初に提案されたCDNバージョンはすでに開発が終了していたようで見つからず、現行のNPMパッケージの方にはCDN版が用意されていない。ChatGPTがjsDelivrにある古いバージョンを勧めてきたが、CORS（クロスオリジン）の制限や外部依存が気になり、最終的に自分のサーバーにインストールすることに。</p>



<p>ところが、パッケージはNode.js用のモジュール形式（CommonJS/ESM）で、そのままではブラウザでは動かせない。ChatGPTの指示に従ってビルド済みのJS（avif.min.js）を生成したが、WASMファイル（avif_enc.wasm）は自動で出力されなかった。インストールフォルダ内にあったWASMを手動でコピーしたところ、なんとか動作するようになった。</p>



<p>とはいえWASMはネイティブアプリではないため、AVIFへの変換処理は正直言って遅い。それでも、クライアントだけでAVIFを生成できる手段としては現状これが一番実用的かもしれない。</p>



<p></p>The post <a href="https://uda2.com/blog/webpconv/">Webp変換 with AVIF</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/webpconv/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/webpconv/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[ただのルーレット]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/roulette/" />

		<id>https://uda2.com/blog/?p=2837</id>
		<updated>2025-05-12T08:41:06Z</updated>
		<published>2025-05-12T08:41:04Z</published>
		<category scheme="https://uda2.com/blog" term="制作日記" /><category scheme="https://uda2.com/blog" term="WEBアプリ" /><category scheme="https://uda2.com/blog" term="ルーレット" />
		<summary type="html"><![CDATA[<p>先日公開した[DRAFT-U]には希望の候補がかぶった際の抽選用にルーレット機能があるのですが。このルーレット機能の制作時にルーレットをネット検索してたらルーレットアプリが意外と人気なようなので[DRAFT-U]からルー</p>
The post <a href="https://uda2.com/blog/roulette/">ただのルーレット</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/roulette/"><![CDATA[<p>先日公開した[DRAFT-U]には希望の候補がかぶった際の抽選用にルーレット機能があるのですが。このルーレット機能の制作時にルーレットをネット検索してたらルーレットアプリが意外と人気なようなので[DRAFT-U]からルーレットを切り出しました。<br><br><a href="https://games.uda2.com/roulette/" target="_blank" rel="noopener" title="">ただのルーレット</a></p>



<span id="more-2837"></span>



<p>スワイプすると盤が回り始めます。（追いスワイプでさらに加速できます。）<br>回すスピードが一定以上の速度になるとストップボタンが有効になり押すと止める事ができます。<br>※私調べではルーレットのWEBアプリは多くあるけど手回しできるルーレットは他に無いと思います。</p>



<p>当選の割合を調整したい場合は、同じ項目を連続することで結合されますので下記のように入力すると「ラマ」が40％で「アルパカ」が60％の確率になります。</p>



<pre class="wp-block-code"><code>ラマ
ラマ
アルパカ
アルパカ
アルパカ</code></pre>



<p>「ただのルーレット」の「ただ」は<br>ルーレットで検索すると<a href="https://www.gov-online.go.jp/article/202411/entry-6786.html" target="_blank" rel="noopener" title="">なぜか</a>無料とかで検索する人が多かったので「free（無料）」という意味の「ただ」と<br>ドラフト会議の[DRAFT-U]から「just」の意味の「ただ」のダブルミーイングです。</p>



<p></p>The post <a href="https://uda2.com/blog/roulette/">ただのルーレット</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/roulette/#comments" thr:count="1" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/roulette/feed/atom/" thr:count="1" />
			<thr:total>1</thr:total>
			</entry>
		<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[ドラフト会議システム[DRAFT-U]]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/draft-u/" />

		<id>https://uda2.com/blog/?p=2834</id>
		<updated>2025-05-08T13:03:57Z</updated>
		<published>2025-05-08T13:03:56Z</published>
		<category scheme="https://uda2.com/blog" term="制作日記" /><category scheme="https://uda2.com/blog" term="POG" /><category scheme="https://uda2.com/blog" term="websocket" /><category scheme="https://uda2.com/blog" term="WEBアプリ" /><category scheme="https://uda2.com/blog" term="ドラフト" />
		<summary type="html"><![CDATA[<p>先日、ドラフト会議システム[DRAFT-U]を公開しました。 約5年前に「POGをするのにドラフト会議をするシステムが無い」という話しを聞いて、websocketを使ったら出来るのでは？と思って早速作ってみたのだけど参加</p>
The post <a href="https://uda2.com/blog/draft-u/">ドラフト会議システム[DRAFT-U]</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/draft-u/"><![CDATA[<p>先日、ドラフト会議システム<a href="https://draft.tenhp.com/" target="_blank" rel="noopener nofollow" title="[DRAFT-U]">[DRAFT-U]</a>を公開しました。</p>



<p>約5年前に「POGをするのにドラフト会議をするシステムが無い」という話しを聞いて、websocketを使ったら出来るのでは？と思って早速作ってみたのだけど参加方法に課題があり開発を中止してたのですが、先日マイリリースをLINEログイン対応した流れで「普段からPOGのやりとりをLINEグループでやってるとしたらLINEログインで解決するのでは？」と考え開発を再開し公開にいたりました。</p>



<span id="more-2834"></span>



<p>参加方法にまつわる悩みをざっくり言うと…<br>最初は「メールアドレス＋名前＋アイコン画像」で会員登録必須にしていたんですが、正直これは参加者にとってハードルが高すぎました。<br>そこで「ゲスト参加OK！」にしてみたものの、ログインが切れると別人扱いになるし、YouTubeなどで配信したときにURLが漏れるとリスナーが勝手に入ってきて収集付かない感じになりそう。</p>



<p>そんな中で見つけた救世主がLINEログイン。<br>登録の手間はゼロ、名前もアイコンもそのまま使えて、参加者もラクラク。これならスマートに運用できそうです。</p>



<p>最初は「全員の投票を待つ」「自動でラウンドを進める」「票の重複チェックを入れる」など、いろいろ制御をする設計で進めてました。<br>でも、よく考えると「一時的に離席した」「初心者に優先権を与える」「特定の項目は票がかぶっても大丈夫」などドラフト会議のルールは千差万別。<br>そこでドラフトUではシンプルに「参加者は伏せて投票、主催者が開票して割り当てる」だけのスタイルにしました。</p>



<p>この仕組みなら、途中から参加したり抜けたりする人がいても、主催者が柔軟に対応できるのが強みです。</p>



<p></p>The post <a href="https://uda2.com/blog/draft-u/">ドラフト会議システム[DRAFT-U]</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/draft-u/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/draft-u/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[FTPで上書き前に差分を確認したい]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/ftp_diff/" />

		<id>https://uda2.com/blog/?p=2820</id>
		<updated>2025-02-03T05:17:15Z</updated>
		<published>2025-02-03T05:17:14Z</published>
		<category scheme="https://uda2.com/blog" term="おすすめフリーソフト" /><category scheme="https://uda2.com/blog" term="FTP" /><category scheme="https://uda2.com/blog" term="mac" /><category scheme="https://uda2.com/blog" term="差分" />
		<summary type="html"><![CDATA[<p>東京とかでは「Gitでプッシュしてデプロイ」とかが主流になってると噂に聞きますが地方は殆どの仕事がレンタルサーバーなのでFTPでアップロードしていいる状態です。ちょっとしたお直しのときは「実は誰か変更してました」みたいな</p>
The post <a href="https://uda2.com/blog/ftp_diff/">FTPで上書き前に差分を確認したい</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/ftp_diff/"><![CDATA[<p>東京とかでは「Gitでプッシュしてデプロイ」とかが主流になってると噂に聞きますが地方は殆どの仕事がレンタルサーバーなのでFTPでアップロードしていいる状態です。ちょっとしたお直しのときは「実は誰か変更してました」みたいなことがないように（いわゆる先祖返りしないように）上書きアップロードの際にローカルのファイルとリモートのファイルの差分を適時確認してからアップロードするようにしています。</p>



<p>このファイルの差分を確認する機能のあるFTPクライアントソフトを<a href="https://filezilla-project.org/" target="_blank" rel="noopener" title="FileZilla">FileZilla</a>、<a href="https://winscp.net/eng/docs/lang:jp" target="_blank" rel="noopener" title="WinSCP">WinSCP</a>、Yummy FTP、<a href="https://binarynights.com/" target="_blank" rel="noopener" title="">ForkLift</a> と渡り歩いてました。<br>WindowsはFileZillaを使ってたのですがGumblarのニュースを見てより安全とのふれこみのWinSCPに切り替えてから今も満足してるのです。ただMacの方は有償のYummyを使ってたのに開発中止になり数年で使用不能になりForkLiftも有償ですが使えてたのですがいつの間にか差分ソフトの起動ができなくなり最新版にしようと思ったらバージョンが上がって月額払わないと使えなくなりました。</p>



<span id="more-2820"></span>



<p>ChatGPTやGoogle検索で差分が見れるMac用FTPクライアントソフトを探したが無償や買い切りで良さそうなのは見つけられませんでした。</p>



<p>代替え案としてリモートのファイルをプレビューする機能とかは付いてるものが多いので一時フォルダにダウンロードする機能は多くのFTPクライアントソフトに備わってる。そこで比較ソフトに送れないかと考えた。</p>



<p>FTPクライアントソフトは普段使ってる<a href="https://panic.com/jp/transmit/" target="_blank" rel="noopener" title="">Transmit</a>（有償）を使うとして、差分を確認するツールは以前はXcodeを使ってたのでFileMergeで差分を表示してたのですがXcodeを長らく使ってないので他のツールを探すためChatGPTに聞いたがおすすめされた<a href="https://meld.app/" target="_blank" rel="noopener" title="">Meld</a>と<a href="https://sourceforge.net/projects/diffuse/" target="_blank" rel="noopener" title="">Diffuse</a>は開発が止まってるのかHomebrewでインストールできなくなってたので以前使ったことがある<a href="https://apps.apple.com/jp/app/comparemerge2/id1459748650?mt=12" target="_blank" rel="noopener" title="">CompareMerge2</a>の無料版を使う事にした。</p>



<p>具体的な手順は下記のような感じ。<br>1. Transmitで接続しリモートのファイルを選択。<br>2. 右クリックから「このアプリケーションから開く」からCompareMerge2を選択。（又はDockのCompareMerge2にドラッグ）<br>3. すると一時ファイルにダウンロードされたリモートファイルが入る。<br>4. 比較対象のもう一つの枠にローカルのファイルをドラッグ＆ドロップする。</p>



<p>手数が多いですが他のFTPソフトが対応するまでこの方式で我慢します。</p>The post <a href="https://uda2.com/blog/ftp_diff/">FTPで上書き前に差分を確認したい</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/ftp_diff/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/ftp_diff/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[アンダーLEDぽい犬のセイフティライト]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/doglight/" />

		<id>https://uda2.com/blog/?p=2799</id>
		<updated>2025-02-04T04:51:32Z</updated>
		<published>2025-01-13T15:13:28Z</published>
		<category scheme="https://uda2.com/blog" term="うだうだ" /><category scheme="https://uda2.com/blog" term="ハーネス" /><category scheme="https://uda2.com/blog" term="ライト" /><category scheme="https://uda2.com/blog" term="犬" />
		<summary type="html"><![CDATA[<p>夜に犬の散歩すると車や自転車に轢かれるかもしれないのでペンダント型の小さいお散歩ライトをつけてたのですが、もっと自転車の人に犬が歩いてると認識してもらえるように明るく車の下に付いてるアンダーLEDみたいに犬の足元を照らす</p>
The post <a href="https://uda2.com/blog/doglight/">アンダーLEDぽい犬のセイフティライト</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/doglight/"><![CDATA[<p>夜に犬の散歩すると車や自転車に轢かれるかもしれないのでペンダント型の小さいお散歩ライトをつけてたのですが、もっと自転車の人に犬が歩いてると認識してもらえるように明るく車の下に付いてるアンダーLEDみたいに犬の足元を照らすライトにしたいと思って試行錯誤しいて感じに仕上がったので作り方を共有したいと思います。</p>



<span id="more-2799"></span>



<figure class="wp-block-image size-full"><a href="https://uda2.com/blog/wp-content/uploads/doglight02.jpg"><img fetchpriority="high" decoding="async" width="1000" height="265" src="https://uda2.com/blog/wp-content/uploads/doglight02.jpg" alt="" class="wp-image-2806" srcset="https://uda2.com/blog/wp-content/uploads/doglight02.jpg 1000w, https://uda2.com/blog/wp-content/uploads/doglight02-300x80.jpg 300w, https://uda2.com/blog/wp-content/uploads/doglight02-768x204.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure>



<p>まず、ライトは<a href="https://www.amazon.co.jp/dp/B07Z53GH1P?tag=uda2ch-22&amp;linkCode=ogi&amp;th=1&amp;psc=1&amp;language=ja_JP" target="_blank" rel="noopener" title="">amazon</a>とかで売ってる紐に添わせるタイプのライトを買いました。（私は白が欲しかったので<a href="https://ja.aliexpress.com/item/1005006193965647.html" target="_blank" rel="noopener" title="">アリエク</a>で買いました。）</p>



<figure class="wp-block-image size-full"><a href="https://uda2.com/blog/wp-content/uploads/doglight03.jpg"><img decoding="async" width="1000" height="320" src="https://uda2.com/blog/wp-content/uploads/doglight03.jpg" alt="" class="wp-image-2807" srcset="https://uda2.com/blog/wp-content/uploads/doglight03.jpg 1000w, https://uda2.com/blog/wp-content/uploads/doglight03-300x96.jpg 300w, https://uda2.com/blog/wp-content/uploads/doglight03-768x246.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure>



<p>付属の紐だとバンドの方向の問題でうまくハーネスに固定できないのでハーネスの中央の紐を切ります。<br>（デザインカッターで縫い目を拡げながら糸を切ると簡単に取れます。）</p>



<figure class="wp-block-image size-full"><a href="https://uda2.com/blog/wp-content/uploads/doglight04.jpg"><img decoding="async" width="1000" height="220" src="https://uda2.com/blog/wp-content/uploads/doglight04.jpg" alt="" class="wp-image-2808" srcset="https://uda2.com/blog/wp-content/uploads/doglight04.jpg 1000w, https://uda2.com/blog/wp-content/uploads/doglight04-300x66.jpg 300w, https://uda2.com/blog/wp-content/uploads/doglight04-768x169.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://uda2.com/blog/wp-content/uploads/doglight05.jpg"><img loading="lazy" decoding="async" width="1001" height="300" src="https://uda2.com/blog/wp-content/uploads/doglight05.jpg" alt="" class="wp-image-2809" srcset="https://uda2.com/blog/wp-content/uploads/doglight05.jpg 1001w, https://uda2.com/blog/wp-content/uploads/doglight05-300x90.jpg 300w, https://uda2.com/blog/wp-content/uploads/doglight05-768x230.jpg 768w" sizes="auto, (max-width: 1001px) 100vw, 1001px" /></a></figure>



<p>そしてキャンドゥでゲットした「<a href="https://netshop.cando-web.co.jp/view/item/000000011410?category_page_id=bags" target="_blank" rel="noopener" title="">リュック肩ズレ防止ベルト</a>」のベルト1本と留め具2個を拝借します。<br>ベルトを図のように通して固定します。（ライトの穴が小さいので強引に入れないと入らないです。）</p>



<p>しばらく使ってたのですが電池が1個から2個になった事もありペンダント型と比べ明るくなったのはいい事だが一週間ぐらいで電池切れるので金銭的にも環境的にも負荷が大きい。そこで<a href="https://www.amazon.co.jp/dp/B0834VPZ82?tag=uda2ch-22&amp;linkCode=ogi&amp;th=1&amp;psc=1&amp;language=ja_JP" target="_blank" rel="noopener" title="">充電式ボタン電池</a>を使うことにした。<br>充電式にしたらすごく明るくなる反面1.5日くらいで切れるようになった。<br>電気に詳しくは無いが充電池は直列につなげたら放電し続けるのかもしれない。</p>



<figure class="wp-block-image size-full"><a href="https://uda2.com/blog/wp-content/uploads/doglight06-1.jpg"><img loading="lazy" decoding="async" width="1000" height="300" src="https://uda2.com/blog/wp-content/uploads/doglight06-1.jpg" alt="" class="wp-image-2814" srcset="https://uda2.com/blog/wp-content/uploads/doglight06-1.jpg 1000w, https://uda2.com/blog/wp-content/uploads/doglight06-1-300x90.jpg 300w, https://uda2.com/blog/wp-content/uploads/doglight06-1-768x230.jpg 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></a></figure>



<p>よく調べると充電ボタン電池のLIR2032が3.7Vで使い捨てのボタン電池CR2032が3Vなので試しにボタン1個でやってみたら意外と明るかったのでボタン電池一個で収まるようにしていきます。<br>ボタン電池サイズの金属があればいいのですが見つからなかったので近しいサイズの1円玉を挟みつつ、反対のフタ側からグラつきを抑えるため100均の少しクッションの付いた滑りどめを小さく切って貼り付けました。接点が小さくなるので不安はありましたが特に問題無く点灯しています。<br>ボタン1個でも4日ほど保っています。</p>



<p></p>The post <a href="https://uda2.com/blog/doglight/">アンダーLEDぽい犬のセイフティライト</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/doglight/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/doglight/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[CSSだけでトグル式Tooltip 2024]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/css_tooltip/" />

		<id>https://uda2.com/blog/?p=2778</id>
		<updated>2024-04-25T05:27:38Z</updated>
		<published>2024-04-25T05:10:42Z</published>
		<category scheme="https://uda2.com/blog" term="制作日記" /><category scheme="https://uda2.com/blog" term="CSS" /><category scheme="https://uda2.com/blog" term="html" /><category scheme="https://uda2.com/blog" term="tooltip" /><category scheme="https://uda2.com/blog" term="アクセシビリティ" /><category scheme="https://uda2.com/blog" term="スマホ" />
		<summary type="html"><![CDATA[<p>カーソル合わせたらその説明が吹き出しで現れるToopTipというものがありますが、その性質上スマホやスクリーンリーダーと相性が悪かったのですがクリック式にする事で解決したものをHTMLとCSSだけで作ってみました。 ht</p>
The post <a href="https://uda2.com/blog/css_tooltip/">CSSだけでトグル式Tooltip 2024</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/css_tooltip/"><![CDATA[<p>カーソル合わせたらその説明が吹き出しで現れるToopTipというものがありますが、その性質上スマホやスクリーンリーダーと相性が悪かったのですがクリック式にする事で解決したものをHTMLとCSSだけで作ってみました。</p>



<p><a href="https://uda2.com/testbox/tooltip.html" target="_blank" rel="noopener nofollow" title="">https://uda2.com/testbox/tooltip.html</a></p>



<p>一般的なツールチップと同じくリンク文字にホバーしたら開閉します。<br>アイコンをクリックするとトグル式で開閉します。<br>※上のサンプルはHTMLやCSS（アイコンも含む）をしょうよう個人問わず勝手に使ってOKです。</p>



<span id="more-2778"></span>



<p>まず、「そういえばツールチップってアクセシビリティ的に使えないよなー」と思って検索してたら。<br>クリックで表示させる方法の比較について書かれてたツイートを見かけたのですが、ホバー式のメリットに「cssだけで作ることができる」と書かれてたのに触発され「今ならクリック式も出来そうやな」とやってみた。</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="ja" dir="ltr">ツールチップのUIに関して、アンケートでは「ホバーで表示」が優勢だったけれど、改めてそれぞれのメリットを考えたので、備忘録としてまとめておいた。<br><br>うちはホバーかな、という結論に。<br>ツールチップの中身が長めだったり、レスポンシブデザインだったりするとクリックに軍配が上がるかも。 <a href="https://t.co/azzpTzKuFA">pic.twitter.com/azzpTzKuFA</a></p>&mdash; fumi / Designer (@fmngok) <a href="https://twitter.com/fmngok/status/1265171595649138688?ref_src=twsrc%5Etfw">May 26, 2020</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



CSS<pre><code>label.htooltip {
    position: relative;
    display: inline-block;
    width: 1em;
    height: 1em;
    background: url(&quot;data:image/svg+xml;charset=utf8,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 16 16%22%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill:%23F00;stroke-width:0px;%7D%3C/style%3E%3C/defs%3E%3Cpolygon class=%22cls-1%22 points=%228.02 16 5.98 12.96 10.06 12.96 8.02 16%22/%3E%3Cpath class=%22cls-1%22 d=%22M14.7,0H1.3C.58,0,0,.58,0,1.3v10.4c0,.72.58,1.3,1.3,1.3h13.4c.72,0,1.3-.58,1.3-1.3V1.3c0-.72-.58-1.3-1.3-1.3ZM13.1,5.76l-1.25,1.25-.03-.03c-.21.06-.65-.13-1.18-.52l-1.69,3.87h0s0,0,0,0c-.25.25-1.12-.22-2.1-1.06l-2.45,1.69s-.19-.06-.34-.21c-.15-.15-.24-.3-.21-.34l1.69-2.45c-.84-.98-1.31-1.85-1.06-2.1,0,0,0,0,.01,0h0s3.87-1.7,3.87-1.7c-.39-.53-.58-.97-.52-1.18l-.03-.03,1.25-1.25c.26-.26,1.38.43,2.5,1.55,1.12,1.12,1.81,2.24,1.55,2.5Z%22/%3E%3C/svg%3E&quot;) center center no-repeat;
    background-size: contain;
    filter: saturate(0%);
}
label.htooltip:has(input[type=&quot;checkbox&quot;]:checked) {
    filter: saturate(100%);
}
label.htooltip p,
label.htooltip p::before {
    position: absolute;
    left: 50%;
    display: block;
    background-color: #212121;
}
label.htooltip p {
    margin: 0;
    padding: 7px;
    font-size: 12px;
    line-height: 1.2em;
    color: #fff;
    border-radius: 3px;
    width: 100px;
    bottom: calc(100% + 10px);
    box-sizing: border-box;
    box-shadow: 0 0 7px rgba(0, 0, 0, 0.35);
    opacity: 0;
    transform: translate(-50%, 10px);
    transition: transform .3s ease-in-out,opacity .3s ease-in-out;
    pointer-events: none;
}
label.htooltip p::before {
    content: &quot;&quot;;
    bottom: -10px;
    width: 14px;
    height: 10px;
    clip-path: polygon(50% 100%, 100% 0%, 0% 0%);
    transform: translate(-50%, 0);
}
label.htooltip&gt;input[type=&quot;checkbox&quot;] {
    display: none;
}
label.htooltip {
    opacity: 1;
}
label.htooltip:has(input[type=&quot;checkbox&quot;]:checked) p {
    transform: translate(-50%, 0);
    opacity: 1;
    pointer-events: auto;
}
@media (hover: hover) or (pointer: fine) {
    label.htooltip:hover {
        filter: saturate(100%);
    }
    label.htooltip:has(input[type=&quot;checkbox&quot;]:checked):hover {
        opacity: 0.8;
    }
    a:hover+label.htooltip p,
    label.htooltip:hover p {
        transform: translate(-50%, 0);
        opacity: 1;
        pointer-events: auto;
    }
}</code></pre>



HTML<pre><code>&lt;a href=&quot;https://uda2.com/blog/css_tooltip/&quot;&gt;リンクテキスト&lt;/a&gt;
&lt;label class=&quot;htooltip&quot; aria-label=&quot;ツールチップ&quot;&gt;&lt;input type=&quot;checkbox&quot;&gt;&lt;p&gt;ここにツールチップの内容を書く&lt;/p&gt;&lt;/label&gt;
</code></pre>



<p>設置はソースのCSSをコピペした上で、ToolTipを付けたいリンクのタグのそばに「<strong>&lt;label class=&#8221;htooltip&#8221; aria-label=&#8221;ツールチップ&#8221;&gt;&lt;input type=&#8221;checkbox&#8221;&gt;&lt;p&gt;ここにツールチップの内容を書く&lt;/p&gt;&lt;/label&gt;</strong>」と書いてください。<br>近くに複数のリンクがある場合は各リンクとlabelのセットを何かしらで括ってください。</p>



<p>一般的なツールチップと同じくリンク文字にホバーしたら開閉します。<br>アイコンをクリックするとトグル式で開閉します。</p>



<p>ホバーのアクションを入れるとスマホでの挙動がおかしくなるのでメディアクエリ「<strong>@media (hover: hover) or (pointer: fine)</strong>」でパソコンでのみホバーアクションをするようにしています。</p>



<p>アクセシビリティにも配慮する為に<strong>visibility:hidden;</strong>を使わずに「<strong>opacity: 0;</strong>」と「<strong>pointer-events: none;</strong>」で隠しています。<br>これでブラウザ上からは消えるけどスクリーンリーダーでは読めるという状態になります。</p>The post <a href="https://uda2.com/blog/css_tooltip/">CSSだけでトグル式Tooltip 2024</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/css_tooltip/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/css_tooltip/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>uda2</name>
					</author>

		<title type="html"><![CDATA[URLエンコーディングの違い]]></title>
		<link rel="alternate" type="text/html" href="https://uda2.com/blog/urlencodevariation/" />

		<id>https://uda2.com/blog/?p=2768</id>
		<updated>2024-04-15T04:54:40Z</updated>
		<published>2024-04-15T04:54:39Z</published>
		<category scheme="https://uda2.com/blog" term="制作日記" /><category scheme="https://uda2.com/blog" term="JavaScript" /><category scheme="https://uda2.com/blog" term="PHP" /><category scheme="https://uda2.com/blog" term="Python" />
		<summary type="html"><![CDATA[<p>URLエンコードはその名の通りURLに使えない文字をエスケープする記述ですが言語や関数によって若干ぶれがあるのですが実際に比較検証した事がなかったのでやってみました。まずURLはURL Standardに定義されていてP</p>
The post <a href="https://uda2.com/blog/urlencodevariation/">URLエンコーディングの違い</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></summary>

					<content type="html" xml:base="https://uda2.com/blog/urlencodevariation/"><![CDATA[<p>URLエンコードはその名の通りURLに使えない文字をエスケープする記述ですが言語や関数によって若干ぶれがあるのですが実際に比較検証した事がなかったのでやってみました。<br>まずURLは<a href="https://url.spec.whatwg.org/" target="_blank" rel="noreferrer noopener">URL Standard</a>に定義されていて<br>PHPの世界ではurlencode()とrawurlencode()があってurlencode()は半角スペースを「+」に変換したり「~」も変換したりします。<br>Pythonはurllib.parse.quote()とurllib.parse.quote_plus()があってurllib.parse.quote_plus()は半角スペースを「+」に変換したり「/」も変換したりします。<br>JavaScriptはencodeURI()とencodeURIComponent()があってencodeURIComponentはURI予約語「#$&amp;+,/:;=?@」も変換するという違いがあります。</p>



<span id="more-2768"></span>



<p>差異のある文字をピックアップしたアスキー表を作成しました。（<a href="https://uda2.com/testbox/test_urlencode.php" target="_blank" rel="noopener" title="">全文字コードはコチラ</a>）</p>



<figure class="wp-block-table"><table><thead><tr><th>10進数</th><th>16進数</th><th>実体</th><th>PHP1</th><th>PHP2</th><th>PY1</th><th>PY2</th><th>JS1</th><th>JS2</th></tr></thead><tbody><tr><th>32</th><th>U+0020</th><th></th><td>+</td><td>%20</td><td>+</td><td>%20</td><td>%20</td><td>%20</td></tr><tr><th>33</th><th>U+0021</th><th>!</th><td>%21</td><td>%21</td><td>%21</td><td>%21</td><td>!</td><td>!</td></tr><tr><th>35</th><th>U+0023</th><th>#</th><td>%23</td><td>%23</td><td>%23</td><td>%23</td><td>#</td><td>%23</td></tr><tr><th>36</th><th>U+0024</th><th>$</th><td>%24</td><td>%24</td><td>%24</td><td>%24</td><td>$</td><td>%24</td></tr><tr><th>38</th><th>U+0026</th><th>&amp;</th><td>%26</td><td>%26</td><td>%26</td><td>%26</td><td>&amp;</td><td>%26</td></tr><tr><th>39</th><th>U+0027</th><th>&#8216;</th><td>%27</td><td>%27</td><td>%27</td><td>%27</td><td>&#8216;</td><td>&#8216;</td></tr><tr><th>40</th><th>U+0028</th><th>(</th><td>%28</td><td>%28</td><td>%28</td><td>%28</td><td>(</td><td>(</td></tr><tr><th>41</th><th>U+0029</th><th>)</th><td>%29</td><td>%29</td><td>%29</td><td>%29</td><td>)</td><td>)</td></tr><tr><th>42</th><th>U+002a</th><th>*</th><td>%2A</td><td>%2A</td><td>%2A</td><td>%2A</td><td>*</td><td>*</td></tr><tr><th>43</th><th>U+002b</th><th>+</th><td>%2B</td><td>%2B</td><td>%2B</td><td>%2B</td><td>+</td><td>%2B</td></tr><tr><th>44</th><th>U+002c</th><th>,</th><td>%2C</td><td>%2C</td><td>%2C</td><td>%2C</td><td>,</td><td>%2C</td></tr><tr><th>47</th><th>U+002f</th><th>/</th><td>%2F</td><td>%2F</td><td>%2F</td><td>/</td><td>/</td><td>%2F</td></tr><tr><th>58</th><th>U+003a</th><th>:</th><td>%3A</td><td>%3A</td><td>%3A</td><td>%3A</td><td>:</td><td>%3A</td></tr><tr><th>59</th><th>U+003b</th><th>;</th><td>%3B</td><td>%3B</td><td>%3B</td><td>%3B</td><td>;</td><td>%3B</td></tr><tr><th>61</th><th>U+003d</th><th>=</th><td>%3D</td><td>%3D</td><td>%3D</td><td>%3D</td><td>=</td><td>%3D</td></tr><tr><th>63</th><th>U+003f</th><th>?</th><td>%3F</td><td>%3F</td><td>%3F</td><td>%3F</td><td>?</td><td>%3F</td></tr><tr><th>64</th><th>U+0040</th><th>@</th><td>%40</td><td>%40</td><td>%40</td><td>%40</td><td>@</td><td>%40</td></tr><tr><th>126</th><th>U+007e</th><th>~</th><td>%7E</td><td>~</td><td>~</td><td>~</td><td>~</td><td>~</td></tr></tbody></table><figcaption class="wp-element-caption">PHP1：PHPの関数「urlencode()」<br>PHP2：PHPの関数「rawurlencode()」<br>PY1：Pythonの関数「urllib.parse.quote_plus()」<br>PY2：Pythonの関数「urllib.parse.quote()」<br>JS1：Pythonの関数「encodeURI()」<br>JS2：Pythonの関数「encodeURIComponent()」</figcaption></figure>



<p>デコードは概ね問題無いが「+」を絡めると誤変換が起こる。<br>例えばサーバー側でrawurlencode()やurllib.parse.quote_plus()を使ってエンコードした文字列をブラウザのrawurlencodeでデコードすると誤変換が起こる。<br>なのでサーバーでもクライアントでも使うなら「+」を使わないdecodeURIComponent()・urllib.parse.quote()・rawurldecode()がオススメです。</p>



<p>なお変換するなら<a href="https://tools.uda2.com/urlencode.html" target="_blank" rel="noreferrer noopener">URLエンコードとデコード -UDA TOOL-</a>を用意しております。</p>The post <a href="https://uda2.com/blog/urlencodevariation/">URLエンコーディングの違い</a> first appeared on <a href="https://uda2.com/blog">ウダ2Blog</a>.]]></content>
		
					<link rel="replies" type="text/html" href="https://uda2.com/blog/urlencodevariation/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://uda2.com/blog/urlencodevariation/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
	</feed>
