私は恐ろしいサイトを継承しているので、この質問を許してください:)サイトを完全にUTF8にアップグレードするのではなく、非標準の文字をHTMLエンティティに変換する必要があります。
&#ord_value;
このテストスクリプトは、1つの文字に対してこれを実行します。
$foo =~ s/(\x{ed})/to_ord($1)/e;
sub to_ord {
return ("&#" . ord($_[0]). ";")
}
しかし、私がする必要があるのは、ord 127より大きいものでこれをトリガーすることです。これを行う簡単な方法はありますか?キャラクタークラスを調べましたが、法案に合うものが見つかりません
FWIW、私は彼らに現在データを保存する方法がひどいことを彼らに知らせました、そしてHTMLエンティティを検索しようとする人々に問題を引き起こすでしょう-しかしこれは私のコントロールの外にあります。
更新:これは機能しますが、それを行うためのより良い方法があるはずです-提案があれば共有してください:)
s/([^a-z \.,-_0-9])/to_ord($1)/eg
s/(...)/ ... /eg;
パターンの選択:
[^\x00-\x21\x23-\x25\x28-\x3B\x3D\x3F-\x7F]
(非ASCIIをエスケープします。)[^\x09\x0A\x0D\x20-\x21\x23-\x25\x28-\x3B\x3D\x3F-\x7E]
(非ASCII文字と制御文字をエスケープします。)置換式の選択:
"&#".ord($1).";"
sprintf("&#x%X;", ord($1))
(CPUは追加されますが、帯域幅が減少します。)例えば、
s/([^\x09\x0A\x0D\x20-\x21\x23-\x25\x28-\x3B\x3D\x3F-\x7E])/ sprintf("&#x%X;", ord($1)) /eg;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加