【问题标题】:PHP remove white space not working because of encoding?由于编码,PHP删除空格不起作用?
【发布时间】:2020-10-09 09:01:29
【问题描述】:

我有一个字符串,即根据 mb_detect_encoding() 的 UTF-8 编码。我想这样修剪:

$string = trim($string);

但是没有效果。

当我用 urlencode($string) 查看字符串时,它会显示:

“++++++++++++++++++字符串+更多+文本++++++++++++”

根据:https://markushedlund.com/dev/trim-unicodeutf-8-whitespace-in-php/这段代码我试过了,但是没有效果:

preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u', '', $string);

我该如何修剪? 我怎样才能找到空格字符代表什么,然后替换它。我只知道 urlencode,但这只是通过显示 +++ 告诉我这是一个空格。

更新: 感谢下面 cmets 中的@Stefanov.sm,我了解到您可以使用以下命令将字符串输出为十六进制:bin2hex($string);然后我看到一大堆 20202020,我看到 20 代表 UTF-8 编码中的空间。 奇怪的是,虽然修剪不起作用,但起作用的是:

$string = str_replace("\x20","",$string);

也许我能找出原因。但至少完成了摆脱它们的目标。

【问题讨论】:

  • 阅读the manual + 应该是空格。
  • 对不起,更新了问题,我知道 + 代表空格,但是我该如何修剪呢?我无法摆脱这些空间。
  • 如果没有可重现的例子,这很难说。
  • 初始字符串中可能包含不可打印的 Unicode 字符。你能先用bin2hex 十六进制转储它然后看看吗?或者将mb_convert_encoding 应用到您的相关代码页中,然后应用trim
  • 嗨@Stefanov.sm 谢谢,没想到。好的,当放入 bin2hex 时,我得到很多:“2020202020202020”这似乎代表一个空格符号:fileformat.info/info/unicode/char/20/index.htm。现在如何摆脱它们。我试过 str_replace("\0x20","",$string);但这行不通。

标签: php encoding trim


【解决方案1】:

“+”号保留为空白。

您应该尝试使用 mb_detect_encoding 函数来确定编码。 https://www.php.net/manual/fr/function.mb-detect-encoding.php

<?php
    mb_detect_encoding($str, 'UTF-8', true); // Will tell you TRUE or FALSE 
?>

【讨论】:

  • 嗨,是的 mb_detect_encoding 告诉我:UTF-8
【解决方案2】:

尝试明确命名“+”进行删除:

%string = trim($string, "+ ");

注意“+”后面的空格,意思是“去掉空格和加号”。

编码可能与他无关,除非这些优点是对其他角色的误传。

【讨论】:

  • 这些加号仅因urlencode() 而出现。 OP想知道为什么trim()没有删除空格。
  • 啊,好点子。尽管如此,作为 ascii 集的一部分的空间在任何编码中都应该是相同的。我猜代码中还有其他问题。
【解决方案3】:

你可以试试这个多字节修剪功能:

function mb_trim($str) {
  return preg_replace("/^\s+|\s+$/u", "", $str); 
}

不保证它会解决问题,但它不会伤害。

我在这里找到它:Multibyte trim in PHP?

【讨论】:

  • 感谢您的帮助,它没有工作,似乎不是这样。查看更新后的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多