【问题标题】:How can I reindex a string?如何重新索引字符串?
【发布时间】:2011-10-15 19:55:17
【问题描述】:

它基本上归结为这一点。我有一个名为 $name 的字符串。 $name 通常具有值''blablabla'',该值来自外部资源,因此它被封装在两个单引号中。如果我自己声明这个变量,它看起来像这样: $name = "''blablabla''";

我将通过以下方式删除这些单引号:

$name[0] = '';
$name[1] = '';
$name[mb_strlen($name, 'UTF-8')-1] = '';
$name[mb_strlen($name, 'UTF-8')-2] = ''; 

(用索引取消设置字符串不起作用) 所以现在我有 $name 价值“blablabla”没有信号引号。 这是我的问题。 当我查看源代码时,“blablabla”之前有奇怪的字符。 我该如何处理? 而且,有什么方法可以重新索引我的字符串(例如 array_values 对数组有什么作用)?

编辑 最终我使用了这段代码:

$name = mb_substr($name, 2, -2, 'UTF-8');

【问题讨论】:

    标签: php arrays string indexing


    【解决方案1】:
    $name = "''foo''";
    
    $name = substr($name, 2, -2);
    
    echo $name; # foo
    
    1. 您正在处理编码,而有问题的字符 (') 是单字节的。 PHP 中的字符串仍然是二进制的,这意味着,您可以在末尾将其截断。
    2. 当您使用索引取消设置时,请记住它是二进制位置。 mb_strlen 不适合采集二进制索引位置,strlen 适合:

    .

    $name = "''foo''";
    
    $name[0] = '';
    $name[1] = '';
    
    $len = strlen($name); # binary safe string length
    
    $name[$len-1] = '';
    $name[$len-2] = '';
    
    echo $name; # foo
    

    mb_strlenstrlen 相比

    $utf8 = 'ä';
    mb_strlen($utf8, 'UTF-8'); # 1
    strlen($utf8);             # 2
    
    $utf8[1] != 'ä';
    

    【讨论】:

    • 你是什么意思有问题的字符是单字节的?我说价值观来自外部资源。所以它可以是多字节的。这就是我使用 PHP 的 mb 函数的原因。顺便说一句,谢谢你的回答,我不想粗鲁,但我只是说我为什么使用 mb 函数。
    • 不支持多字节字符集是可以的。如果字符串是 UTF-8(如您所写),则 ' 是一个字节。因此,您可以使用具体的字节偏移量来节省地删除它们,但您需要使用 strlen 收集的字节偏移量,因为在这种情况下,只有 strlen 会返回正确的值。
    • 所以你是说 mb_strlen 行不通?那我就不明白为什么了。
    • 我在下面添加了一个比较。请查看 mb_strlen 的作用和不作用。
    • hakre,你应该使用 $utf8[0] 这看起来很奇怪
    【解决方案2】:

    您可以使用修剪功能:

    $name = trim($name, "'");
    echo $name; // Prints: blablabla
    

    【讨论】:

      猜你喜欢
      • 2021-06-15
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      相关资源
      最近更新 更多