GAEではきだしたhtmlのタグ内に「&」などの特殊文字があると、iPhoneのXmlParserでタグ内の文字をパースできない

259 views
Skip to first unread message

okamurian

unread,
Mar 26, 2011, 7:19:20 PM3/26/11
to Google-App-Engine-Japan
初めて投稿させていただきます。

私は現在、GAEから以下のようなhtmlを書き

<info>
<author>okamurina</author>
<content>Select Problem</content>
<lat>35.030505</lat>
<lng>135.776552</lng>
<comment>comment</comment>
<date>2011-03-26 22:50:05.847535</date>
</info>

iPhoneから、そのhtmlをパースするという処理をしようとしています。

しかし、書き出すhtmlのタグ内に、「&」や「>」などの特殊文字が入っていると(<content>&&&</content>という感じで
す)、

タグの中身をiPhone側で認識できずに困っています。

以下のようなコードでhtmlを書き出しているのですが、どうすれば「&」や「>」などの特殊文字を認識してくれるようになるのでしょうか?

-------------------------------------------------------------------------------
//pythonのコード
class Databox(webapp.RequestHandler):
def get(self):
path = os.path.join(os.path.dirname(__file__),'databox.html')
data_original = Data.gql("order by date
desc").fetch(limit=100,offset=0)
data_with_keys = []
for data in data_original:
data_with_keys.append(
{
"author" : data.author,
"content" : data.content,
"lat" : data.lat,
"lng" : data.lng,
"comment" : data.comment,
"date" : data.date,
"key" : data.key(),
}
)
template_values = {
'datas': data_with_keys
}
self.response.out.write(template.render(path,template_values))
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
//databox.htmlのコード
<databox>
{% for data in datas %}
<info>
<author>{{ data.author }}</author>
<content>{{ data.content }}</content>
<lat>{{ data.lat }}</lat>
<lng>{{ data.lng }}</lng>
<comment>{{ data.comment }}</comment>
<date>{{ data.date }}</date>
</info>
<br>
{% endfor %}
</databox>
-------------------------------------------------------------------------------


以前、同じなようなことをサクラサーバでMySQLとphpで行った際にには、

以下のようにすることで「&」などの特殊文字でもiPhone側でタグ内の文字を取得できました。

$message_i = htmlspecialchars($item["MESSAGE"]);

phpでいうところの htmlspecialcharsを行えば、この問題は解決するのでしょうか?

もしよければ、Gqlで htmlspecialchars的な処理をする方法を教えていただけないでしょうか?

■■■■■■■質問まとめ■■■■■■
(1)どうすれば「&」や「>」などの特殊文字を認識してくれるようになるのでしょうか?
(2)phpでいうところの htmlspecialcharsはGQLでは、どうすればよいのでしょうか?


よろしくお願い致します。

Ian Lewis

unread,
Mar 26, 2011, 10:03:58 PM3/26/11
to google-app-...@googlegroups.com, Google-App-Engine-Japan
イアンです。

GAEのSDKに含まれている Django テンプレートを使っている限りは {{ aaa }} のようなテンプレート変数をデフォルトでエスケープすてくれるはず。つまり、PHPのhtmlspecialchars() と同じような処理を自動でやってくれます。

例: {{ "A&B" }} => A&amp;B

それで iPhone で A&B が表示されるはず

私は問題をちゃんと理解していないかもしれませんが、以下のコードでは&がデータに含まれても大丈夫だはずです。

iPhone が認識できないと書いていましたが、実際になにが表示されていますでしょうか。data.content に入っているのは実際にhtmlデータでしょうか。

iPhoneから送信

> --
> このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
> このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、google-app-engine...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/google-app-engine-japan?hl=ja からこのグループにアクセスしてください。
>

JUN ICHIKAWA

unread,
Mar 27, 2011, 12:17:22 AM3/27/11
to google-app-...@googlegroups.com
こんにちは、いちかわです。

pythonでエスケープがしたいと言うことであれば、

from xml.sax.saxutils import *
とimportして、エスケープしたい文字列を「escape()」で処理すればオッケーです。

例)
"content" : escape(data.content),

みたいな感じです。

2011年3月27日11:03 Ian Lewis <ianm...@gmail.com>:

okamurian

unread,
Mar 27, 2011, 9:52:44 AM3/27/11
to Google-App-Engine-Japan
イアン様

ご返信ありがとうございます。

> GAEのSDKに含まれている Django テンプレートを使っている限りは {{ aaa }} のようなテンプレート変数をデフォルトでエスケープすてくれるはず。つまり、PHPのhtmlspecialchars() と同じような処理を自動でやってくれます。
> 例: {{ "A&B" }} => A&amp;B
> それで iPhone で A&B が表示されるはず

> iPhone が認識できないと書いていましたが、実際になにが表示されていますでしょうか。data.content に入っているのは実際にhtmlデータでしょうか。


今の状態では、「&」などがあった際に、

safariなどのブラウザ上では、「&」などの特殊文字がちゃんと表示されているのですが、

iPhoneでxmlParserを用いて以下のようなhtmlをパースする際に、

<info>
<author>okamurina</author>
<content>&&&&&</content>
<lat>35.030505</lat>
<lng>135.776552</lng>
<comment>comment</comment>
<date>2011-03-26 22:50:05.847535</date>
</info>


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString
*)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString
*)qualifiedName
attributes:(NSDictionary *)attributeDict

で、<content>タグは認識してくれるのですが

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString
*)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:
(NSString *)qName

で、</content>タグを認識してくれず、「&&&」以降の情報がまったくパースできない状況となっています。(わかりずらくて申し訳ありませ
ん。。。)

okamurian

unread,
Mar 27, 2011, 9:56:43 AM3/27/11
to Google-App-Engine-Japan
いちかわ様

ご返信ありがとうございます。

> from xml.sax.saxutils import *
> とimportして、エスケープしたい文字列を「escape()」で処理すればオッケーです。

escape()ですか。

ありがとうございます!

さっそくためしてみたいと思います。

okamurian

unread,
Mar 28, 2011, 9:41:04 AM3/28/11
to Google-App-Engine-Japan
いちかわ様のおっしゃっていたように、

> from xml.sax.saxutils import *
> とimportして、エスケープしたい文字列を「escape()」で処理すればオッケーです。

とすることで、解決できました。

本当にありがとうございました。
Reply all
Reply to author
Forward
0 new messages