繁体   English   中英

Javascript encodeURI()与PHP rawurldecode()和特殊字符

[英]Javascript encodeURI() vs. PHP rawurldecode() and special characters

编码与德国变音象A,U串,ö,SS的JavaScript 是encodeURI()导致了bug PHP中rawurldecode解码之后()。 尽管字符串似乎已正确解码,但事实并非如此。 请参阅以下来自我的IDE的示例屏幕截图

在此处输入图片说明在此处输入图片说明在此处输入图片说明

而且-与rawurldecode()一起解码的字符串的strlen()给出的字符比实际更多!

当我需要处理解码后的字符串时会出现问题,例如,如果我想用ae,ue和oe替换德语字符ä,ü,ö。 可以在此处提供的示例中看到。

我还做了一个PHP小提琴 ,可以看到整个怪异之处。

到目前为止,我已经尝试过:-utf8_decode-iconv-以及这里的前两个建议

这是一个Unicode等价问题,看起来您的IDE不能很好地处理多字节字符串。

在unicode中,您可以使用以下任一种来表示Ü:

  • utf8中的单个Unicode代码点(U + 00DC)或%C3%9C
  • 或使用带修饰符(U + 0308)的大写字母U(U + 0055)或utf8中的%55%CC%88

您的GWT字符串使用后一种方法称为NFD,而您的PHP中的字符串使用第一种方法称为NFC。 这就是为什么您的GWT字符串要长3个字符的原因,即使它们都是逻辑上相同的unicode字符串的有效编码。 您的问题是PHP中的字节对字节不相同。

有关utf-8规范化的更多详细信息。

如果要对字符串进行预浸料替换,则需要先将其标准化为相同形式。 从您的示例中,我可以看到您的IDE正在使用NFC,因为它是可以使用的PHP字符串。 因此,我建议在PHP中将NFC形式规范化(默认设置),然后执行preg_replace。

http://php.net/manual/zh/normalizer.normalize.php

function cleanImageName($name)
{
    $name = Normalizer::normalize( $name, Normalizer::FORM_C );
        $clean = preg_replace(

否则,你必须做一些像这样的是基于这篇文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM