[英]Using extended ascii code as second string in file search using PHP
[英]PHP - String with ASCII-Extended chars only
使用PHP我想知道我的$ string是否包含此列表中33到255之間的任何非ASCII擴展字符: http : //www.ascii-code.com/
此外,是否可以包含其他各種ASCII字符用於拒絕? 像182和135(相應的¶和‡符號)。 我的意思是,如果$ string有這個,我想得到一個bool也是假的。
我知道如何使用ASCII,但不使用ASCII-Extended。
擴展ASCII為十進制128-255,普通(7位)ASCII可打印字符為32(空格)到126(波形符號)。
因此,在正常可打印范圍之外找到任何8位字符的正則表達式將是:
/[^ -~]/
基本上,這說“不是通過代字號”。 在PHP中:
$nonprintable_or_extended = preg_match('/[^ -~]/', $string) === 1;
編輯添加:我重新閱讀你的問題,並且第二個想到我認為你也想要允許一些 “擴展ASCII”字符。 對此沒有簡單的答案,因為代碼點127之上的任何內容都涉及字符編碼 。 在美國,我們通常使用以下三種中的一種:
根據以下評論進行編輯:如果您想允許某些字符,請先對輸入編碼進行標准化。 我們將以UTF-8運行,我們可以檢查並轉換cp1252 / ISO-8859-1的編碼:
// Validate the UTF-8 (from drupal_validate_utf8()).
// @see https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/drupal_validate_utf8/7
if (strlen($string) != 0 && preg_match('/^./us', $string) !== 1) {
// Convert to UTF-8 if it isn't already (assuming input was "Western" cp1252/ISO).
$string = @iconv('Windows-1252', 'UTF-8//IGNORE', $string);
}
現在$string
保證是一個有效的UTF-8編碼字符串。 然后,只允許單字節“擴展ASCII”(拉丁語-1和cp1252提供的補充),並以區域設置感知方式音譯類似字符:
// Ensure the locale is right for our iconv() operations.
// This establishes how transliteration will determine the appropriate destination character(s).
setlocale(LC_CTYPE, 'en_US.UTF-8');
$string = iconv('utf-8', 'CP1252//TRANSLIT//IGNORE', $string);
此時$string
將是一個cp1252,單字節表示字符串; 超出該范圍的任何內容將被音譯(如果可能)或丟棄。 您可以在此處使用REGEX進一步過濾,例如:
// Allow only printable characters (exclude control codes below \x20 [space char]),
// and only the Euro cp1252 character (\x80) and A-tilde (Ãã) characters (\xC3 and \xE3).
$filtered_string = preg_replace('[\x20-\x7F\x80\xC3\xE3]+', '', $string);
編輯:請看這個工作演示 。
來自! 到ÿ
要檢查是否有任何不在 ASCII范圍內的字符,33到255非常容易。 只需使用此正則表達式:
`[^!-ÿ]`
這是一個否定的字符類,匹配任何不在之間的字符!
和ÿ
。 請注意,擴展的ASCII范圍取決於計算機的區域設置。 它應該適合你。
也不包括¶
和‡
為了排除這些字符,我們可以將最初的否定類分解為三個范圍,以便在兩個新字符周圍留出空間:來自!
該字符前ˆ
從字符之后ˆ
字符前¶
之后......從性格¶
到ÿ
。
但是將兩個字符添加到自己的類中並使用OR連接它們會更清晰(並且更易於維護)。 你可以使用這個正則表達式:
`[ˆ¶]|[^!-ÿ]`
[ˆ¶]
中的兩個字符中的任何一個,我們有一個匹配,OR |
!-ÿ
范圍內。 要添加排除項,只需在第一個類中添加字符即可。
要檢測擴展的ASCII字符集,請使用:
$extended = preg_match('/[\x7f-\xff]/', $str );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.