在ErlyWeb中处理中文字符

转载:http://blog.csdn.net/minyskirt/article/details/5291494


在Erlang的老版本中,是不支持Unicode(utf8)字符的,不过幸运的是在R13版本上,已经提供支持了。有兴趣的朋友可以在http://erlang-china.org/misc/erlang_r13_unicode.html找到示例。

 

自然,由于之前的Erlang版本没有提供unicode的支持,所以在利用ErlyWeb开发Web应用时处理中文字符的输入,就变得是一件很复杂的事情,虽然可以从MySQL数据库中读取中文字符。

 

下面就是在利用ErlyWeb处理中文字符中需要注意的地方:

1)、MySQL数据库的字符编码设置为unicode。

2)、每个html页面的字符编码都要设置为utf-8,在<head/>标签中增加<Meta http-equiv=”Content-Type” Content=”text/html; Charset=utf-8″>

3)、利用erlydb链接MySQL数据库中,需要增加字符编码参数,比如:erlydb:start(mysql,[{hostname,"localhost"},{username,"root"},{password,"123456"},{database,"blog"},{encoding,utf8}]).,如果直接用Erlang的MySQL驱动链接数据库,则可以这样:mysql:start_link(p1,"localhost",3306,"root","123456","blog",undefined,utf8).

4)、在讲中文字符写入数据库时,现把中文字符的列表转换为二进制。比如中文字符"王",利用yaws_api:parse_post获取到的对应的值是一个列表[231,142,139],而列表中的值正好是字符"王"的二进制,所以需要用iolist_to_binary/1或者list_to_binary/1函数转换成二进制<<231,142,139>>,

最后把转换后的二进制值赋值给对应的字段即可。

 

下面的代码是一个功能简单的新增数据到数据库表的代码,可以参照:

1)、insert_controller.erl

-module(insert_controller).
-compile(export_all).

index(A) ->
    case yaws_arg:method(A) of
    'POST' ->
        Params = yaws_api:parse_post(A),
        {[FirstName,LastName,Email],Errors} = erlyweb_forms:validate(Params,["firstname","lastname","email"],fun validate/2),
        if Errors =/= [] ->
                {data, {FirstName,LastName,Email,Errors}};
             true ->
                register_usr(FirstName, LastName, Email),
                 {ewr, show}
        end;
    _ ->
         {data, {[],[],[],[]}}
    end.

validate(Name, Val) -> 
    case Name of
         "firstname" ->
        if Val == [] ->
                {error, {missing_field, "firstname"}};
            true ->
                ok
        end;
         "lastname" ->
        if Val == [] ->
                {error, {missing_field, "lastname"}};
            true ->
                ok
        end;
         "email" ->
        if Val == [] ->
                {error, {missing_field, "email"}};
            true ->
                ok
        end;
         _ ->
        ok
    end.

register_usr(FirstName, LastName, Email) ->
    First_Name = iolist_to_binary (FirstName),
    Last_Name = iolist_to_binary (LastName),
    %io:format("~p~n",[FirstName]),
    %io:format("~p~n",[First_Name]),
    Author = author:new_with([{first_name,First_Name},{last_name,Last_Name},{email,Email}]),
    author:save(Author).

 

2)、insert_view.et

<%@ index({FirstName,LastName,Email,Errs1}) %>
<% test_messages:show_errs(Errs1) %>
<form action="insert" method="post">
<div>FirstName</div>
<div><input name="firstname" id="firstname" value="<%FirstName%>"/></div>
<div>LastName</div>
<div><input name="lastname" id="lastname" value="<%LastName%>"/></div>
<div>Email</div>
<div><input name="email" id="email" value="<%Email%>"/></div>
<div><input type="submit" value="insert"/> </div>
</form>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值