URLのクエリ文字列で空白(スペース)、+、%のようなものはどうするか
Wikipedia用のURLを生成するときに困ったのでメモ WikipediaのURLでは、クエリ文字列の空白は「_」で表されてるっぽい
うまく解釈してくれないだめなやつ
https://en.wikipedia.org/w/index.php?search=C++ C&C C#&title=Special:Search&profile=advanced&fulltext=1&ns0=1
正しいURLとして解釈してくれるやつ
WikipediaのURLを生成するにはJavaScriptだとこんな感じ
code:memo.js
/**
* URLのクエリを読めるようにするため特定の文字だけエンコードする
* @param {string} str
* @return {string}
*/
function encode2ReadableQuery(str) {
const specialChars = ' !"#$%&\'()*+,/:;<=>?@[]^`{|}~';
let result = '';
for (let i = 0; i < str.length; i++) {
if (specialChars.indexOf(stri) !== -1) { result += "%" + str.charCodeAt(i).toString(16).padStart(2, "0");
} else {
}
}
return result;
}
// WikipediaのページのURL生成
// タイトル
const title_en1 = "C++&C#"
// スペース(空白)はアンダースコア(_)に置き換えておく
const wikipedia_encoded_title = encode2ReadableQuery(title_en1.replaceAll(/ /g, "_"))
const wikipedia_en_url = https://en.wikipedia.org/wiki/${wikipedia_encoded_title}
console.log(wikipedia_en_url)
// Wikipediaの検索
const title_en2 = "C++ C&C C#"
// クエリ文字列を作る
const title_plus_en = title_en2.split(" ").map((x) => {
return encode2ReadableQuery(x)
}).join("+")
// Cosenseの用の文字列を作る
const cosense_wikipedia_en_search_url = [https://en.wikipedia.org/w/index.php?search=${title_plus_en}&title=Special:Search&profile=advanced&fulltext=1&ns0=1 ${title_en}(検索) - Wikipedia(英)
Googleの検索URLも同じようにして作れる
code:memo.js
const cosense_google_en_search_url = [https://www.google.com/search?q=${title_plus_en}&gl=jp&hl=ja ${title_en}(日)]
参考
関連