使用Javascript encodeURI()对带有德语变音符号(如ä,ü,ö,ß)的字符串进行编码会导致在使用 rawurldecode()在PHP中解码后出现奇怪的错误。虽然字符串似乎被正确解码但事实并非如此。请参阅以下示例来自我的IDE的屏幕截图
使用rawurldecode()的 strlen() - 解码后的字符串会提供比实际更多的字符!
当我需要处理解码后的字符串时出现问题,例如,如果我想用ae,ue和oe替换德语字符ä,ü,ö。这可以在提供的示例here中看到。
我也做了一个PHP fiddle,可以看到这整个奇怪。
到目前为止我尝试过的事情: - utf8_decode - iconv - 以及来自here
的前两条建议答案 0 :(得分:0)
这是一个Unicode equivalence问题,看起来您的IDE无法很好地处理多字节字符串。
在unicode中,您可以使用以下任一代表Ü:
您的GWT字符串使用后一种称为NFD的方法,而您的一种方法则使用第一种称为NFC的方法。这就是为什么你的GWT字符串长3个字符,即使它们都是逻辑上相同的unicode字符串的有效编码。你的问题是它们在PHP中的字节不一样。
有关utf-8 normalisation的更多详情。
如果您想对字符串进行preg替换,则需要先将它们标准化为相同的表单。从您的示例中我可以看到您的IDE正在使用NFC,因为它是可用的PHP字符串。因此,我建议在PHP(默认)中规范化为NFC表单,然后执行preg_replace。
http://php.net/manual/en/normalizer.normalize.php
function cleanImageName($name)
{
$name = Normalizer::normalize( $name, Normalizer::FORM_C );
$clean = preg_replace(
否则,您必须执行基于like this的<{3}}。