【问题标题】:Trim Function doesn't Work修剪功能不起作用
【发布时间】:2015-06-16 02:26:30
【问题描述】:

嗨(对不起我的英语xD),

我正在 MySql 中获取我的数据库的数据,这些数据(格式为“玩家 1 - 玩家 2”的一对玩家)。我用explode 函数按字符- 剪切了这个,因此我得到了'Player 1'和'Player 2'字符串。我尝试使用修剪功能删除开头和结尾的空格,但这不起作用。我怀疑这个问题与-字符的其他问题相似,我键盘的普通-不使用explode函数拆分字符串,我不得不去PHPMyAdmin并复制一个-字符现有字符串并将其粘贴到第二个explode函数参数中,之后,explode函数工作。

我尝试使用相同的- 字符(登录 PHPMyAdmin 复制一个空格并将其粘贴为trim 函数的第二个参数,但这次不起作用:()。

还可以尝试使用str_replace 函数(无论消除什么差距)并且不工作,也可以尝试使用preg_replace 函数等......没有任何工作,因为显然保存在数据库中的空白不是和我的键盘一样,我怀疑问题与字符集或排序规则有关,但我不知道我应该做什么,因为 PHP 的表、链接、字符集和其他东西都是 UTF-8 和 utf8-spanish -ci 排序规则和字符集。

声明:数据的输入是由 xdom (PHP) 从其他不受我控制的站点进行的。

<tbody>
<?php while ($partidos = mysqli_fetch_array($sql)) { ?>
    <tr>
        <td class="center"><?php echo $partidos['fecha']; ?></td>
        <td><?php $participante = explode("₋", $partidos['jugadores']);
            $participante1 = trim($participante[0]);
            $participante2 = trim($participante[1]);

            echo trim($participante1) . "<br>vs<br>" . trim($participante2);
            ?></td>
        <td><?php if ($partidos['estado'] == 0) { ?> En Curso<?php } elseif ($partidos['estado'] == 1) {
                if ($partidos['alerta'] == 0) { ?> Terminado<?php } else { ?>Terminado - Error <i
                    class="fa fa-exclamation-triangle"></i><?php }
            } ?></td>
        <td><?php if ($partidos['alerta_medica'] == 1) { ?> Si <i class="fa fa-2 fa-medkit"
                                                                  style="color:#C00;"></i><?php } else { ?> No<?php } ?>
        </td>
        <?php if ($_SESSION['tipo'] == 1 || $_SESSION['tipo'] == 2) { ?>
            <td class="center">
            </td>
        <?php } ?>
    </tr>
<?php } ?>
</tbody>

【问题讨论】:

  • 你试过Mysql trim还是PHP函数?
  • PHP函数,可以用'-'字符分割字段字符串并修剪mysql中的每个结果名称吗?
  • 在 myphpadmin 中你看到一个空格还是�?
  • 普通空格:S,该字段的排序规则是utf8-spanish-ci,我执行查询:mysqli_query($conexion,"SET CHARACTER SET 'utf8'"); mysqli_query($conexion,"SET NAMES 'utf8'");在 mysqli_connect 之后,PHP 字符集在 php.ini 中设置为 uft8
  • 我想看看你的代码..所以我可以确定它为什么没有修剪那些空白,你能不能导出你的数据库并发布一个带有这些类型空白的 INSERT跨度>

标签: php mysql utf-8 character-encoding trim


【解决方案1】:

感谢@Rick James,我发现了问题,看着数据库的十六进制响应,我注意到两个空格是 x20,但一个是 xC2 xA0。在 stackoverflow 的其他帖子中阅读,我发现 xC2 xA0 是一个非中断空间,但这对于修剪功能来说是不被识别的。解决方案是将此指定为函数的第二个参数:

$participante1 = trim($participante[0],"\x20,\xC2,\xA0");
$participante2 = trim($participante[1],"\x20,\xC2,\xA0");

现在空格已正确删除:3

感谢大家帮助解决这个问题:)

【讨论】:

    【解决方案2】:

    由于特殊字符的两侧各有 3 个空格,因此将字符串拆分为 3 个空格。

    像这样:

    <?php
    
    foreach( $strings as $string) {
        $players = explode("   ",$string);
        print "Player 1: " . $players[0]  . PHP_EOL;
        print "Player 2: " . $players[2]  . PHP_EOL;
    }
    

    【讨论】:

    • 感谢您的回复,但拆分后的数据格式为Player 1 - Player 2,但- 符号保留在第一个玩家名称的最后一个空格,第二个的开头播放器,主要问题是第二个播放器中的初始空格。
    • 你能发布我的代码输出吗?你能发布这个SHOW CREATE TABLE `jugadores`的结果吗@
    • 当然,你的代码输出是:Player 1: O P Azcoitia/P G. Thombare ₋ J Ladurner/N Verster Notice: Undefined offset: 2 in C:\xxxxxxxxxxxxxxxxx\public_html\第 160 行播放器 2 上的 site\dashboard.php: 查询结果为:link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2013-02-01
    • 1970-01-01
    • 2013-09-13
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多