2

我正在创建一个 Javascript 小部件,它是一个将查询字符串重定向到弹出窗口中的 php 页面的按钮。将集成小部件的页面首先使用以下方法将信息发送到 Javascript 小部件:

<script src="http://api.mydomain.com/widget/widget.js?api_key=123&firstname=Veronica&lastname=Gällman" type="text/javascript"></script>

小部件读取提交的字符串,然后创建弹出窗口/iframe 并重定向到http://api.mydomain.com/widget/index.php?firstname=Veronica&lastname =Gällman

当包含 JS 小部件的页面没有charset=utf-8. 特殊字符将变成问号或方框。

我的程序员希望我这样做:

<script type="text/javascript">
    var search = 'api_key='+encodeURIComponent('1234')+
        '&firstname='+encodeURIComponent('Veronica')+
        '&lastname='+encodeURIComponent('Gällman')+
    document.write( search );
</script>

但我发现这种方法对于想要使用小部件的人来说是有问题的,而且一点也不优雅。

所以最后,我的问题是:有没有更好的方法来解决这个问题?

该脚本应支持具有charset=utf-8charset=iso-8859-1在其上的页面。

我给他的建议是:

  1. 强制积分器发送&charset=iso-8859-1查询字符串,如果不是utf-8,然后在index.php中将ISO转换为UTF-8

  2. 使用库来检测字符编码。如果检测为 ISO,则在 index.php 中将其转换为 UTF-8

这些听起来合理吗?2号可以吗?或者有更好的解决方案吗?

我是否被迫告诉我的小部件用户urlencode在他们的页面上?

4

2 回答 2

1

You can detect encoding using mb_detect_encoding function and convert it with mb_convert_encoding or iconv.

By the way, can't you make a world a better place by forcing people to use UTF-8? :)

于 2012-08-03T20:07:54.923 回答
1

正如 Donatas 已经提到的,最好强迫人们——尤其是在网络上!——在所有事情上都使用 UTF8。

但如果您需要将 UTF8 字符串转换为 ISO-8859-1,请尝试http://phpjs.org/functions/utf8_decode ...

PS:请记住,并非所有 UTF8 字符都可以用 ISO-8859-1 表示法表示!

于 2012-08-03T20:30:50.380 回答