CharacterEntity

[AppleScripts]シングルクオトのエスケープ処理(phpを使う時のお約束)

シングルクオトのエスケープ処理

-----シングルクオトを含むテキストを定義
set theOriginalText to "<'/>" as text
log theOriginalText
-----シグルクオトの前に\\を付けてエスケープ
set theEscapeSingleQuotesText to my theReplace(theOriginalText, "'", "\\'") as text
log theEscapeSingleQuotesText
-----エンコード処理
set theUrlEncodeText to do shell script ("echo \"<?php print(urlencode('" & theEscapeSingleQuotesText & "'));?>\" | php")
log theUrlEncodeText
-----デコード処理
set theDecodeText to do shell script ("echo \"<?php print(urldecode('" & theUrlEncodeText & "'));?>\" | php")
log theDecodeText


--------------文字の置き換えサブルーチン
to theReplace(theText, theOrgStr, theNewStr)
set theOldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to theOrgStr
set theTmpList to every text item of theText
set AppleScript's text item delimiters to theNewStr
set theReplaceStr to theTmpList as text
set AppleScript's text item delimiters to theOldDelim
return theReplaceStr
end theReplace

「EscapeSingleQuotes.rtf」をダウンロード

「EscapeSingleQuotes.scpt.zip」をダウンロード

|

[AppleScript]ユニコードエスケープをデコードする【その2:pythonを使う】


Json等でよく使われるUnicode16進エスケープ形式の文字列を
テキストにデコードします。

その1はphpを使いました

その2ではpythonを使います

ながれはこんな感じ
\の処理が面倒でAppleScriptから使うのはちょっと無理があったかな
phpの方が良いですね

Website_image20130210_193115


--------ターミナルをあらかじめ起動しておく
tell application "Terminal"
end tell
(*
サンプルテキスト
君が好き feat.SAKURA,K2C SUNSHINE BAND - ミトカツユキ
*)
set theResultText to "\\u685c\\u821e\\u3044\\u6563\\u308b\\u5b63\\u7bc0\\u306b\\u3000\\u4e8c\\u4eba\\u64ae\\u3063\\u305f\\u5199\\u771f\",\"\\n\\u4eca\\u3082\\u5b9d\\u7269\\u3060\\u3088\\u3000\\u5e78\\u305b\\u3060\\u3063\\u305f\\u304b\\u3089\",\"\\n\",\"\\n\\u4e8c\\u4eba\\u3082\\u3046\\u4e00\\u5ea6\\u3000\\u7d20\\u76f4\\u306b\\u3000\\u4eca\\u3000\\u5bc4\\u308a\\u6dfb\\u3048\\u305f\\u306a\\u3089\",\"\\n\\u306d\\u3048\\u3082\\u3046\\u4e8c\\u5ea6\\u3068\\u96e2\\u308c\\u306a\\u3044\\u3000\\u4eca\\u3082\\u3042\\u306a\\u305f\\u304c\\u597d\\u304d\",\"\\n\",\"\\n\\u6b62\\u307e\\u306a\\u3044\\u96e8\\u306b\\u554f\\u3044\\u304b\\u3051\\u3066\\u3082\",\"\\n\\u3053\\u306e\\u8ddd\\u96e2\\u3000\\u5909\\u308f\\u3089\\u306a\\u3044\\u304b\\u3089\",\"\\n\\u541b\\u304c\\u597d\\u304d\\u3060\\u3068\\u8a00\\u3063\\u3066\",\"\\n\\u3042\\u306a\\u305f\\u306e\\u53e3\\u304b\\u3089\\u8a00\\u3063\\u3066\",\"\\n\\u3082\\u3046\\u8ff7\\u3044\\u306f\\u3057\\u306a\\u3044\\u304b\\u3089\",\"\\n\",\"\\n\\u4e8c\\u4eba\\u3082\\u3046\\u4e00\\u5ea6\\u3000\\u7d20\\u76f4\\u306b\\u3000\\u4eca\\u3000\\u8a31\\u3057\\u3042\\u3048\\u305f\\u306a\\u3089\",\"\\n\\u306f\\u3050\\u3089\\u304b\\u3055\\u305a\\u306b\\u3000\\u3046\\u3051\\u3068\\u3081\\u3066\\u3000\\u4eca\\u3082\\u3042\\u306a\\u305f\\u304c\\u597d\\u304d\",\"\\n\",\"\\n\\u4eca\\u3082\\u541b\\u304c\\u597d\\u304d" as text

--------ダイアログを表示
display dialog "変換するテキストをペースト" default answer theResultText
--------返り値を格納
set theResultText to text returned of the result as text
----------不要な文字を削除 ここはお好みで
set theResultText to my replace(theResultText, ",", "") as text
set theResultText to my replace(theResultText, "\"", "") as text
set theResultText to my replace(theResultText, "(", "") as text
set theResultText to my replace(theResultText, ")", "") as text
set theResultText to my replace(theResultText, ";", "") as text
set theResultText to my replace(theResultText, "[", "") as text
set theResultText to my replace(theResultText, "]", "") as text
set theResultText to my replace(theResultText, "draw", "") as text
set theResultText to my replace(theResultText, "\\n", " ") as text
set theResultText to my replace(theResultText, "\\r", " ") as text

------ディレクトリ名用に日付と時間を取得
set nowTime to do shell script "date '+%Y%m%d%H%M%S'" as text
------pythonスクリプトを使ってユーザーテンポラリーのディレクトリを取得します
-------スクリプトとキャッシュクリア用のディレクトリを作ります
do shell script "mkdir -pv /tmp/python/" & nowTime
--------スクリプト用のファイルを作成
do shell script "touch /tmp/python/" & nowTime & "/unicode_escape.py"
------結果用のファイルを作成
do shell script "touch /tmp/python/" & nowTime & "/unicode_escape.txt"
---------1行目を書き込み
do shell script "echo 'import sys' > /tmp/python/" & nowTime & "/unicode_escape.py "
---------2行目を書き込み
do shell script "echo 'import tempfile' >> /tmp/python/" & nowTime & "/unicode_escape.py "
---------3行目を書き込み
do shell script "echo 'print \"" & theResultText & "\".decode(\"unicode_escape\")' >> /tmp/python/" & nowTime & "/unicode_escape.py"
---------ターミナルに渡す用にパスを整形
set theScriptFile to ("/tmp/python/" & nowTime & "/unicode_escape.py") as text
---------ターミナルで実行する
tell application "Terminal"
do script "python " & theScriptFile
end tell

---------文字の置き換えサブルーチン
to replace(theText, orgStr, newStr)
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to orgStr
set tmpList to every text item of theText
set AppleScript's text item delimiters to newStr
set tmpStr to tmpList as text
set AppleScript's text item delimiters to oldDelim
return tmpStr
end replace

 

 
「unicode_escape.py.rtf」をダウンロード


「unicode_escape.py.scpt.zip」をダウンロード


|

[AppleScript]ユニコードエスケープをデコードする【その1:phpを使う】

Json等でよく使われるUnicode16進エスケープ形式の文字列を
テキストにデコードします。

こんな流れになります

Website_image20130210_185841


一旦
CharacterEntityへ変換してから
CharacterEntityをテキストに戻します。


(*
サンプルテキスト
君が好き feat.SAKURA,K2C SUNSHINE BAND - ミトカツユキ
*)

set theResultText to "\\u685c\\u821e\\u3044\\u6563\\u308b\\u5b63\\u7bc0\\u306b\\u3000\\u4e8c\\u4eba\\u64ae\\u3063\\u305f\\u5199\\u771f\",\"\\n\\u4eca\\u3082\\u5b9d\\u7269\\u3060\\u3088\\u3000\\u5e78\\u305b\\u3060\\u3063\\u305f\\u304b\\u3089\",\"\\n\",\"\\n\\u4e8c\\u4eba\\u3082\\u3046\\u4e00\\u5ea6\\u3000\\u7d20\\u76f4\\u306b\\u3000\\u4eca\\u3000\\u5bc4\\u308a\\u6dfb\\u3048\\u305f\\u306a\\u3089\",\"\\n\\u306d\\u3048\\u3082\\u3046\\u4e8c\\u5ea6\\u3068\\u96e2\\u308c\\u306a\\u3044\\u3000\\u4eca\\u3082\\u3042\\u306a\\u305f\\u304c\\u597d\\u304d\",\"\\n\",\"\\n\\u6b62\\u307e\\u306a\\u3044\\u96e8\\u306b\\u554f\\u3044\\u304b\\u3051\\u3066\\u3082\",\"\\n\\u3053\\u306e\\u8ddd\\u96e2\\u3000\\u5909\\u308f\\u3089\\u306a\\u3044\\u304b\\u3089\",\"\\n\\u541b\\u304c\\u597d\\u304d\\u3060\\u3068\\u8a00\\u3063\\u3066\",\"\\n\\u3042\\u306a\\u305f\\u306e\\u53e3\\u304b\\u3089\\u8a00\\u3063\\u3066\",\"\\n\\u3082\\u3046\\u8ff7\\u3044\\u306f\\u3057\\u306a\\u3044\\u304b\\u3089\",\"\\n\",\"\\n\\u4e8c\\u4eba\\u3082\\u3046\\u4e00\\u5ea6\\u3000\\u7d20\\u76f4\\u306b\\u3000\\u4eca\\u3000\\u8a31\\u3057\\u3042\\u3048\\u305f\\u306a\\u3089\",\"\\n\\u306f\\u3050\\u3089\\u304b\\u3055\\u305a\\u306b\\u3000\\u3046\\u3051\\u3068\\u3081\\u3066\\u3000\\u4eca\\u3082\\u3042\\u306a\\u305f\\u304c\\u597d\\u304d\",\"\\n\",\"\\n\\u4eca\\u3082\\u541b\\u304c\\u597d\\u304d" as text

--------ダイアログを表示
display dialog "変換するテキストをペースト" default answer theResultText
--------返り値を格納
set theResultText to text returned of the result as text
----------不要な文字を削除 ここはお好みで
set theResultText to my replace(theResultText, ",", "") as text
set theResultText to my replace(theResultText, "\"", "") as text
set theResultText to my replace(theResultText, "(", "") as text
set theResultText to my replace(theResultText, ")", "") as text
set theResultText to my replace(theResultText, ";", "") as text
set theResultText to my replace(theResultText, "[", "") as text
set theResultText to my replace(theResultText, "]", "") as text
set theResultText to my replace(theResultText, "draw", "") as text
set theResultText to my replace(theResultText, "callback", "") as text
----------改行を半角スペースに変換 ここもお好みで
set theResultText to my replace(theResultText, "\\n", "\\u20") as text
set theResultText to my replace(theResultText, "\\ud", "\\u20") as text
----------まずマルチバイトの4桁コードをCharacterEntityに変換
set thePregReplace to "php -r 'echo preg_replace(\"/\\\\\\u([0-9abcdef]{4})/\", \"&#x$1;\", \"" & theResultText & "\");'"
set theResultText to do shell script thePregReplace
----------その後でシングルバイトの2桁コードをCharacterEntityに変換
set thePregReplace to "php -r 'echo preg_replace(\"/\\\\\\u([0-9abcdef]{2})/\", \"&#x$1;\", \"" & theResultText & "\");'"
set theResultText to do shell script thePregReplace
----------デコード本処理
set theMbConvertEncoding to "php -r 'echo mb_convert_encoding(\"" & theResultText & "\", \"UTF-8\", \" HTML-ENTITIES \");'"
set theResultText to do shell script theMbConvertEncoding

----------出来上がりを戻す
display dialog "変換出来ました" default answer theResultText


---------文字の置き換えサブルーチン
to replace(theText, orgStr, newStr)
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to orgStr
set tmpList to every text item of theText
set AppleScript's text item delimiters to newStr
set tmpStr to tmpList as text
set AppleScript's text item delimiters to oldDelim
return tmpStr
end replace

「UniEsc2Text.rtf」をダウンロード
「UniEsc2Text.scpt.zip」をダウンロード


|

[HTML5]Named character references

Image00230121_181304


8.5 Named character references — HTML5アイコン:新しいウィンドで開きます

| | コメント (0) | トラックバック (0)

これは便利だぁCharacterEntity取得ツール

Image00230115_25903


CopyPasteCharacter.comアイコン:新しいウィンドで開きます

上部のインターフェイスで
キャラクタをコピーする
Image00230115_30155

CharacterEntityで取得する
Image00230115_30203

が選べます
時間があるときに自分用を作るといいですね。


 

| | コメント (0) | トラックバック (0)

[Q&A]MacでWEBで見かける『あの』文字を入力したい

あの〜ぉ
ハートみたいな変な文字(母国語な人に失礼です...笑)を
BLOGとかにコピペしたらぁ〜
文字バケしちゃうんですぅ〜

だそうで

問題の文字はこれ『


facebookとかでよく見るんだと.....笑
Force4u00221030_221438


こちらの記事
[MorxTester]フォントの文字のGIDやUIDを確認する: [FORCE][LINK]新しいウィンドで開きますに書いた

MorxTesterを入れてあげて
Force4u00221030_222513

前に&#x
後に;
を入れるんだよ

って説明したが
首かしげたままだったので
ダメな様子トホホ

じゃぁこれでやって
[AppleScript]htmlentities変換【TextEdit版】: [FORCE][LINK]新しいウィンドで開きます

って事で終わるんだろうけれども
?エラー?なんで?phpの制限?

面倒だったので


こんなんして終了




display dialog "1文字だけよ" default answer "" buttons {"変換", "Cancel"} with icon 1 default button 1 with title "文字をコピペ" cancel button "Cancel"
set MainText to text returned of the result as Unicode text


tell application "TextEdit"
---tell application "Jedit X"
launch
activate
make new document at end of documents
tell front document
set font of every word to "Arial Unicode"
set its text to (MainText) as text
set test to id of MainText
set TheTextToEncode to every paragraph
set theResult to my encodehexdump(TheTextToEncode)


set theResultHex to "&#x" & theResult & ";"
set every paragraph to theResultHex

---replaceAll string "(.*)" to "&#x\\1;" with select all, case sensitive, grep and entire word

end tell
end tell






on encodehexdump(str)
set scpt to " echo \"" & str & "\"| hexdump |awk '{printf $2 $3 $4}'"
return do shell script scpt
end encodehexdump

まぁねぇ
仕事用じゃぁないし...笑


「encodehexdump.app.zip」をダウンロード[Download]新しいウィンドで開きます

「encodehexdump.rtf」をダウンロード[LINK]新しいウィンドで開きます

| | コメント (0)

[AppleScript]urlencode変換【TextEdit版】

URLエンコードを
PHPを使ってエンコード・デーコードします。


Force4u00220928_04430

Force4u00220928_04447


Force4u00220928_04517

 

urlencode — 文字列を URL エンコードする

urldecode — URL エンコードされた文字列をデコードする


 
文字列を URL エンコードする
urlencode

tell application "TextEdit"
tell front document
set TheTextToEncode to every paragraph
set theResult to my encodeURL(TheTextToEncode)
set every paragraph to theResult
end tell
end tell

on encodeURL(str)
set scpt to "php -r 'echo urlencode(\"" & str & "\");'"
return do shell script scpt
end encodeURL


 
URL エンコードされた文字列をデコードする
urldecode

tell application "TextEdit"
tell front document
set TheTextToEncode to every paragraph
set theResult to my encodeURL(TheTextToEncode)
set every paragraph to theResult
end tell
end tell

on encodeURL(str)
set scpt to "php -r 'echo urldecode(\"" & str & "\");'"
return do shell script scpt
end encodeURL

 

「urlencode.zip」をダウンロード[Download]新しいウィンドで開きます

 

PHP: rawurlencode - Manual[LINK]新しいウィンドで開きます
PHP: urldecode - Manual[LINK]新しいウィンドで開きます

| | コメント (0)

[AppleScript]htmlentities変換【TextEdit版】

こちらの記事
[AppleScript]htmlentities変換: [FORCE][LINK]新しいウィンドで開きます

テキストエディット版


 

OSX内蔵?phpを使います

■【htmlentities】
適用可能な文字を全て HTML エンティティに変換する
html_entity_decode
htmlentities

■【htmlspecialchars】
特殊文字を HTML エンティティに変換する
htmlspecialchars_decode
htmlspecialchars

 

■【htmlentities】
適用可能な文字を全て HTML エンティティに変換する


htmlentities

tell application "TextEdit"
tell front document
set TheTextToEncode to every paragraph
set theResult to my encodeURL(TheTextToEncode)
set every paragraph to theResult
end tell
end tell

on encodeURL(str)
set scpt to "php -r 'echo htmlentities(\"" & str & "\");'"
return do shell script scpt
end encodeURL


html_entity_decode

tell application "TextEdit"
tell front document
set TheTextToEncode to every paragraph
set theResult to my encodeURL(TheTextToEncode)
set every paragraph to theResult
end tell
end tell

on encodeURL(str)
set scpt to "php -r 'echo html_entity_decode(\"" & str & "\");'"
return do shell script scpt
end encodeURL

 
■【htmlspecialchars】
特殊文字を HTML エンティティに変換する


htmlspecialchars_decode

tell application "TextEdit"
tell front document
set TheTextToEncode to every paragraph
set theResult to my encodeURL(TheTextToEncode)
set every paragraph to theResult
end tell
end tell

on encodeURL(str)
set scpt to "php -r 'echo htmlspecialchars_decode(\"" & str & "\");'"
return do shell script scpt
end encodeURL


htmlspecialchars

tell application "TextEdit"
tell front document
set TheTextToEncode to every paragraph
set theResult to my encodeURL(TheTextToEncode)
set every paragraph to theResult
end tell
end tell

on encodeURL(str)
set scpt to "php -r 'echo htmlspecialchars(\"" & str & "\");'"
return do shell script scpt
end encodeURL

「htmlentities.zip」をダウンロード[Download]新しいウィンドで開きます

 
PHP: htmlspecialchars - Manual[LINK]新しいウィンドで開きます
PHP: htmlspecialchars_decode - Manual[LINK]新しいウィンドで開きます
PHP: html_entity_decode - Manual[LINK]新しいウィンドで開きます
PHP: htmlentities - Manual[LINK]新しいウィンドで開きます

  

| | コメント (0)

HTML5

html5.jp[LINK]OpenNewWindowに以下のような記述があります。


『エンティティ参照は amp, lt, gt, apos, quot のみ。それ以外は、例えば &nbsp; であれば &#160; といった表記を使うこと。』

なるほど
&amp;  &lt; &gt; &apos; &quot; (& < > ' " )は
今までどおり使えて
&nbsp;
ノーブレイクスペース (無改行スペース)
が使えなくなるのですね。

むう〜
面倒だなぁ〜色々

ちなみに
10進
&#160; 
16進
&#xA0; 
です。

16進の方がなじみがいいな


  

| | コメント (0)

CharacterEntityとURLencode

前回[LINK]OpenNewWindow
UnicodeのCharacterEntityについて
10進数と16進数の違いを
iWorkのnumbersを使って見てみました。

今回はURLエンコードと比較します。

 

まずは前回同様『文字パレット』を見てみましょう
546x688_url_01

日本語の『あ』は

Unicode(16進数)で3042
UTF-8でE38182

URLエンコードとキャラクタ実体での違いを
図にすると

559x378_url_03

このような違いになっている事がわかります。


CharacterEntityでは
3042に『&#x』を頭に 終わりに『;』を付けます
&#x3042;となります

一方URLエンコードは
UTF-8での『あ』のコード値の
E38182を2文字づつ『%』で区切ります。
%E3%81%82
 

では
このUTF-8のコード値はどうやって取得したら良いでしょう。
(文字パレット以外の方法で)

 
■バイナリーエディタを使う事で取得出来ます

361x394_url_02

UTF-8で保存してあるテキストファイルを
バイナリエディタで開く事で簡単に確認できます
コピーしたりするのも比較的簡単ですね。


■ hexdumpコマンドを使って表示させる事が出来ます。

まずはデスクトップに
以下のようなファイルを用意します。
a.txt には『あ』を
a.hex.txtは空のテキストファイルを用意しておきます。

こまんど
hexdump -v ~/Desktop/a.txt

Screencapture00220616_211831
このように
図のようにUTF-8の16進数コードを得る事が出来ます。


また
hexdump -v ~/Desktop/a.txt > ~/Desktop/a.hex.txt
このようにすれば
先ほどのテキストファイルに

Screencapture00220616_213026_2
このように
テキストとして内容を保存する事が出来ます。


 
最近では日本語のURLについて
サーバー DNS ブラウザ 共に対応が進んでいますので
あまり使う事も無くなりました
URLエンコードですが
仕組みについては
覚えておいても良いですね。

普段はこちら[LINK]OpenNewWindowのような
変換サービスを利用するのが吉でしょう。


 

追記
URLエンコードについては
UTF-8もSJISも同じ考え方
2文字づつ『%』で区切るは同じです。

1

上の図のように
SJISなら
『%82%a0』になります。


 

また
JeditX[LINK]OpenNewWindowを使って
URLエンコードする事も可能です。
(PHPのコマンドを使っています)
ライブラリ[LINK]OpenNewWindowにある
『選択部分をURLエンコード/デコードする』で

Screencapture00220622_160021

簡単変換出来ます。

このスクリプトを使えば
文字コードを表示する事も可能ですね。
(%取ればいいだけですから)

参考にしてください


   

| | コメント (0)

その他のカテゴリー

Accessibility | AccessibilityCheck | AccessibilityForm | AccessibilityInDesign | AccessibilityPDF | Acrobat | Acrobat Action | Acrobat Annotation | Acrobat AppleScript | Acrobat Layer | Acrobat Plug-ins | Acrobat Portfolios | Acrobat Print | AcrobatBarcode | AcrobatDialog | AcrobatForm | AcrobatJS | AcrobatMenu | AcrobatPDF | AcrobatStamp | AcrobatYouTube | AddressBook | Adobe | Adobe InDesign | AdobeAppleScript | AdobeBridge | AdobeIllustrator | AdobeJSX | aed | Alfresco | Android | AnimationGif | Apple | AppleScript | AppleScriptBasics | AppleScriptCharacter | AppleScriptColor | AppleScriptDroplet | AppleScriptErrorNum | AppleScriptFolder | AppleScriptFontBook | AppleScriptRename | AppleScriptTools | AppleSymbols | Applications | Barcode | Barcode2D | BarcodePostal | BetterHTMLExport | Book | Browser | buzz | Certificates | CharacterEntity | CharacterSets | Colors | Cool Site | CSS | Cutting | DecoMail | DecorationMail | Design | Desktop | Diff | DJ | dmg | DNS | Documents | Download | eBook | Editer | eMail | Envelopes | ExifTool | Facebook | FFmpeg | File System | Fonts | FontsTool | FontsWeb | FOOD | FormPrint | ftp | Gadget | Gif Animation | Google | HexEditor | HTML | info | iPhoto | ISBN | ISO | iTunes | iWork | iWorkNumbers | iWorkNumbersCalendar | iWorkNumbersTimecard | iWorkPages | JavaScript | JeditX | JeditX Regexp | JeditXAppleScript | JIS | jquery | Letterpress | Library | logo | Mac Admin | Mac Archiver | Mac Browser | Mac Browser Plugin | Mac QuickLook | Mac Spotlight | Mac Video | Map | Mobby | Moto | Movies | Music | Network Basic | ntp | OCR | Office | OSX | Pantone | Paper | PDFlib | Permission | Photo | Pictograms | Print | Public | QuickLook | QuickTime | QuickTimeSetting | QuickTimeSound | Real Media | ReName | ResourceFork | ruby | Screen | ScreenCast | Search | Security | SEO | Sharing | SLAResource | Spotlight | Stamp | SWF | Tutorial PSD | TV | Twitter | Typography | Unicode | Utilities | Video | WebFont | Wedding | Windows | WindowsMedia | XML | XMP | XPS | YouTube | YouTube Rss