【问题标题】:UTF8 to CP1255 conversionUTF8 到 CP1255 的转换
【发布时间】:2014-05-03 02:28:19
【问题描述】:

我正在尝试将 UTF-8 字符串转换为 CP1255(希伯来语)

我已尝试运行以下命令(我使用的是 detect_encoding,因为我的某些输入不是 UTF-8):

foreach($param as $key=>$value){
    $newval = iconv(mb_detect_encoding($value),"cp1255",$value);
    $querystr .= $key."=".$newval."&";
}

不管怎样,结果是所有的希伯来字符都返回漂亮的�符号, 并且所有其他(英文/数字)都符合预期并保持原样。

我怎样才能正确地做到这一点?

【问题讨论】:

  • 您在哪里看到 � 符号?您是否(双重/三重)检查过该媒体是否知道 cp1255 编码?例如。在浏览器中检查页面属性,看看它是否真的切换到希伯来语。
  • 在 chrome 控制台 -> 网络 -> 响应选项卡(使用 ajax)也尝试在结果上运行 mb_detect_encoding 并得到“UTF-8”
  • 哦,ajax ...在那种情况下,为什么不坚持使用utf-8?如果您查看 XMLHttpRequest 等的 W3C 规范,您会发现到处都是“使用 utf-8”、“始终使用 utf-8”、“强烈建议使用 utf-8”。
  • 我需要将数据发布到仅接受 CP1255 编码的其他服务器
  • 是客户端/浏览器实际将数据发布到第二台服务器吗?如果是,并且您正在使用 <form> 元素,请在您的第一台服务器上使用 utf-8 编码,并使其成为 <form action="//secondserver..." accept-charset="windows-1255"> 元素,以向浏览器指示编码应该是 cp1255。见w3.org/TR/html401/interact/forms.html#adef-accept-charset

标签: php utf-8 character-encoding iconv


【解决方案1】:

我找到了解决办法:

foreach($param as $key=>$value){
    $value_encoding = mb_detect_encoding($value);
    if($value_encoding == "UTF-8"){
        $newval = iconv($value_encoding,"cp1255",$value);
    }else{
        $newval = $value;
    }
    $endpoint = add_query_arg($key,$newval,$endpoint);
}

$content = file_get_contents($endpoint);

【讨论】:

  • mb_detect_encoding 本身已经不是 100% 可靠的,对每个参数单独做没有多大意义
猜你喜欢
  • 2018-08-28
  • 1970-01-01
  • 2016-01-14
  • 2019-10-31
  • 2011-08-02
  • 2011-11-01
  • 2016-08-12
  • 2021-06-21
  • 2016-12-03
相关资源
最近更新 更多