UTF-8でエンコードされたURLエスケープ

UTF-8でエンコードされたURLエスケープ

一つ変えたい変数拡張URL---ファイル内から直接。
変数拡張を置き換えるURLは、ページ名の言語が右から左(RTL)[ヘブライ語]であるため、UTF-8でエンコードされます。


これは私が使用する代替パターンです(現在はエスケープしていません)。

sed -i 's/$contact_form_success_webpage/https://example.com/index.php?title=%D7%99%D7%A6%D7%99%D7%A8%D7%AA_%D7%A7%D7%A9%D7%A8:%D7%94%D7%A6%D7%9C%D7%97%D7%94/g' FILE

$これを行うには、自動化を実行する前に$contact_form_success_webpageする\$contact_form_success_webpageことで処理できますsed

上記のURLパターンはかなり「簡単」または「単純」ですが、一部のURLにはスラッシュ()がたくさんあり、/エスケープする必要がある他の部分がたくさんある場合があります。


UTF-8でエンコードされたURLをエスケープすることをどのようにお勧めしますか?
(通常、すべてのユースケースにどのパターンを使用しますか?)

ベストアンサー1

これを行う1つの方法は、sedコマンドs / / /のLHSまたはRHSに挿入できる文字列が与えられたら、bashで次のように関数をバインドすることです。

esc_sedvar() {
  case $1 in
    '--lhs')
      a=( '\'  "[" "^" '$' "." "*" / ) ;;
    '--rhs'|*)
      a=( '\' '&' / )
  esac

  local var=$2
  for c in "${a[@]}"; do
    var=${var//"$c"/\\"$c"}
  done
  printf '%s\n' "$var"
}

### don't escape anything in this, for you they are plain strings.
srch='$contact_form_success_webpage/https://example.com'

repl='index.php?title=%D7%99%D7%A6%D7%99%D7%A8%D7%AA_%D7%A7%D7%A9%D7%A8:%D7%94%D7%A6%D7%9C%D7%97%D7%94'

sed -i -e \
's/'\
"$(esc_sedvar --lhs "$srch")"\
'/'\
"$(esc_sedvar --rhs "$repl")"\
'/g'\
   FILE

おすすめ記事