PHP:删除所有但不在特定字符串中的空格

时间:2017-11-21 11:46:57

标签: php

使用此代码我删除字符串中的每个空格。

public function callback_register_settings_remove_spaces( $input ) {

        // New Input
        $new_input = array();
        $new_input = $input;

        // Sanitize the input actually
        $new_input = preg_replace("/\s+/", " ", $new_input);

        // Sanitize the input actually
        $new_input = str_replace(" " , "" , $new_input);

        return $new_input;

    }

但是,如果字符串中存在这样的子字符串,我需要NO REMOVE空格:

<script async src

所以,如果初始字符串是:

<script async src="http">Bla.js</script>
<script>window.dataLayer = window.dataLayer;</script>

需要:

<script async src="http">Bla.js</script><script>window.dataLayer=window.dataLayer;</script>

而不是

<scriptasyncsrc="http">Bla.js</script><script>window.dataLayer=window.dataLayer;</script>

谢谢

3 个答案:

答案 0 :(得分:0)

然后删除换行符?

编辑:啊!没有看到你&#34; =&#34; -sign附近的空格。 对于换行,这仍然有效。在你的情况下,它可能不会。遗憾!

preg_replace( "/\r|\n/", "", $yourString );

Source on Stackoverflow

答案 1 :(得分:0)

某种语法分析器在这里会很好。

以下是一种可能性(一种非常粗糙的)的快速示例:

function minimizeJs($value)
{
    $output = '';

    $i = 0;
    // Iterate thru all TAGs by starting <
    while (($o = strpos($value, '<', $i)) !== false) {
        // There's a match between two TAGs, strip spacing
        if ($i < $o) {
            $output .= preg_replace('/\s+/', '', trim( substr($value, $i, $o - $i) ));
        }
        // Find end of this current TAG (>)
        $i = strpos($value, '>', $o) + 1;
        // Concat the TAG content
        $output .= substr($value, $o, $i - $o);
    }

    return $output;
}

此示例适用于数据以TAG开头并以TAG结尾的特殊情况。如果用于其他情况,则需要在匹配前后解析数据。

编辑:如果JS包含&lt;这将爆炸或&gt;。

答案 2 :(得分:-1)

您可以使用trim(),在此处http://php.net/manual/pt_BR/function.trim.php查看相关内容,您可以使用ltrim()删除左侧空格并rtrim()添加。{/ p>