Php String denetim karakterleri kaldırma

5 Cevap php

Önemsiz gibi görünüyor ama bana zor bir zaman verin:

Does anyone have a hint for me on how to remove control characters like STX from a php string. I played around with

preg_replace("/[^a-zA-Z0-9 .\-_;!:?äÄöÖüÜß<>='\"]/","",$pString)

but found that it removed way to much. Is there a way to remove only controll chars?

tia

K

5 Cevap

PHP [:cntrl:] yerine bazı fantezi karakter-büyü-malzeme kullanabilirsiniz böylece POSIX-Sınıflar desteklemiyor:

ereg_replace("[:cntrl:]", "", $pString);

Edit:

Köşeli ayraç ekstra çifti 5.3 gerekli olabilir.

ereg_replace("[[:cntrl:]]", "", $pString);

Kontrol karakterleri tutmak ama JSON için uyumlu hale getirmek için, ben vardı

$str = preg_replace(
    array(
        '/\x00/', '/\x01/', '/\x02/', '/\x03/', '/\x04/',
        '/\x05/', '/\x06/', '/\x07/', '/\x08/', '/\x09/', '/\x0A/',
        '/\x0B/','/\x0C/','/\x0D/', '/\x0E/', '/\x0F/', '/\x10/', '/\x11/',
        '/\x12/','/\x13/','/\x14/','/\x15/', '/\x16/', '/\x17/', '/\x18/',
        '/\x19/','/\x1A/','/\x1B/','/\x1C/','/\x1D/', '/\x1E/', '/\x1F/'
    ), 
    array(
        "\u0000", "\u0001", "\u0002", "\u0003", "\u0004",
        "\u0005", "\u0006", "\u0007", "\u0008", "\u0009", "\u000A",
        "\u000B", "\u000C", "\u000D", "\u000E", "\u000F", "\u0010", "\u0011",
        "\u0012", "\u0013", "\u0014", "\u0015", "\u0016", "\u0017", "\u0018",
        "\u0019", "\u001A", "\u001B", "\u001C", "\u001D", "\u001E", "\u001F"
    ), 
    $str
);

(JSON kurallar devlet: "tüm Unicode karakterler konulmalıdır karakterleri dışında tırnak içine yerleştirilebilir: tırnak işareti, solidus ters ve denetim karakterleri (U +001 F ile U 0000).")

Unicode girişi için, bu tüm kontrol karakterleri, giriş metin atanmamış, özel kullanımı, biçimlendirme ve vekil kod noktaları (aynı zamanda sekmesi, yeni bir satır olarak boşluk karakterleri, olmayan) kaldıracaktır. Benim girişinden olmayan tüm yazdırılabilir karakterleri kaldırmak için kullanabilirsiniz.

<?php
$clean = preg_replace('/[^\PC\s]/u', '', $input);

\ p hakkında daha fazla bilgi için {C} bakın http://www.regular-expressions.info/unicode.html#category

regex free method

Sadece ben (32 ve 127 altında olanlar) aşina olduğum denetim karakterleri zap ise, bu deneyin:

 for($control = 0; $control < 32; $control++) {
     $pString = str_replace(chr($control), "", $pString;
 }

$pString = str_replace(chr(127), "", $pString;

Döngü biz sadece sonuna eklemek DEL, ama tüm kurtulur.

Ben bu sizin ve komut sonra regex ve regex kütüphane ile ilgili üzerinde çok daha az stresli olacaktır düşünüyorum.