javascript - 解决 friend 名字中单引号的错误

标签 javascript facebook

我的 JavaScript 应用程序使用 Facebook Connect 来显示用户 friend 的个人资料图片。

在 Facebook 端的最新更新在 Safari 中创建错误之前,这一切都很好。

基本上,除非用户 friend 的名字中有撇号(单引号),否则一切正常。例如,想一想像 O'Connor 这样的爱尔兰姓氏。撇号完全破坏了所有个人资料图片的渲染,而只显示剪影。

通常在渲染 fb:profile-pics 时, friend 的名字会成为图像的 alt 和 title 属性的值。但是,如果名称带有撇号,则会发生这种情况(在本例中使用名称 Gregory O'Connor):

<fb:profile-pic class=" FB_profile_pic_rendered FB_ElementReady">
  <!-- Notice the strange new "connor" attribute -->
  <img class=" FB_profile_pic fb_profile_pic_rendered " style="" connor="" title="Gregory O" alt="Gregory O" src="http://profile.ak.fbcdn.net/path/to/friends/profile/image.jpg">
<fb:profile-pic>

对我来说幸运的是,我的代码几乎与 Facebook 为 FB.ApiClient.friends_get 函数示例提供的代码相同,可以在此处找到(如果 friend 的名字中有撇号,将重现 Safari 错误).

发件人:http://developers.facebook.com/docs/?u=facebook.jslib.FB.ApiClient.friends_get

 <div id="profile_pics"></div>
 <script type="text/javascript">
   var widget_div = document.getElementById("profile_pics");
   FB.ensureInit(function () {
     FB.Facebook.apiClient.friends_get(null, function(result) {
       var markup = "";
       var num_friends = result ? Math.min(10, result.length) : 0;
       if (num_friends > 0) {
         for (var i=0; i<num_friends; i++) {
           markup +=
             '<fb:profile-pic size="square" uid="'
             + result[i]
             + '" facebook-logo="true">'
             + ' </fb:profile-pic>';
          }
        }
        widget_div.innerHTML = markup;
        FB.XFBML.Host.parseDomElement(widget_div);
      });
    });
  </script>

由于 Facebook 一直对这个错误保持沉默,我需要在我们这边想出一个修复方法。我开始尝试去掉撇号(由于 Facebook 和我们的应用程序之间的通信和抽象层,它变得非常丑陋),并决定我应该退后一步,在这里征求有关如何解决这个问题的建议。

非常感谢。

编辑

我想通过调用 Facebook 生成的 HTML 的真实示例来澄清。本质上,上述 JavaScript 将从对上述结果的调用中获取用户 ID,并从该结果生成图像的 HTML。

我相信转义 img alt 和 img title 的结果会修复这个错误,但如何访问它的问题对我来说仍然存在。

例子:

<fb:profile-pic class=" FB_profile_pic fb_profile_pic_rendered FB_ElementReady" facebook-logo="false" linked="false" uid="6841956" size="normal">
  <img class=" FB_profile_pic fb_profile_pic_rendered" style="opacity: 1;" connor="" title="Colin O" alt="Colin O" src="http://profile.ak.fbcdn.net/v227/676/36/n6841956_271.jpg">
 </fb:profile-pic>

再次感谢!

最佳答案

与 F3 的答案相关,但不是尝试对整个结果进行编码(请参阅以下链接以了解差异:http://xkr.us/articles/javascript/encode-compare/)是否可以只编码(或删除)单引号?

result[i].replace(/'/g,"%27")

或者,此正则表达式模式应匹配 ' 字符的所有实例

"/'[^']*+'/"

像 Robert 一样,如果您能提供一个返回内容的示例,那将大有帮助。

关于javascript - 解决 friend 名字中单引号的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194850/

相关文章:

php - 如何验证用户的 Facebook ID 以防止再次重新提交

ios - 在iOS中从新的Facebook SDK 4中获取用户个人资料图片

javascript - 将句子中单词的首字母大写,手动替换除外

javascript - JSF:如何实现类似 eclipse 的控制台?

Android Facebook 分享对话框回调

jquery - Facebook 分享按钮 og :image

javascript - 在 native iOS 应用程序中使用 PassportJS 和 Nodejs 时出现错误 "The redirect_uri URL must be absolute"

javascript - 运行 Screeps 游戏脚本时出错

javascript - Three.js onClick 动画永远持续下去

javascript - 为什么当打印对话框中的页面时数据未加载到表中