voku/portable-ascii

便携式ASCII库 - 性能优化的PHP(ASCII)字符串函数。


README

SWUbanner

Build Status Build status codecov.io Codacy Badge Latest Stable Version Total Downloads License Donate to this project using Paypal Donate to this project using Patreon

🔡 便携式ASCII

描述

它是用PHP(PHP 7+)编写的,可以在没有“mbstring”、“iconv”或其他任何额外编码php扩展的情况下在您的服务器上运行。

便携式ASCII的优点是易于使用,易于打包。

该项目基于...

索引

替代方案

如果您喜欢更面向对象的方式来编辑字符串,那么您可以查看voku/Stringy,它是“danielstjules/Stringy”的分支,但它使用了“Portable ASCII”类和一些额外的方法。

// Portable ASCII
use voku\helper\ASCII;
ASCII::to_transliterate('déjà σσς iıii'); // 'deja sss iiii'

// voku/Stringy
use Stringy\Stringy as S;
$stringy = S::create('déjà σσς iıii');
$stringy->toTransliterate();              // 'deja sss iiii'

使用“composer require”安装“Portable ASCII”

composer require voku/portable-ascii

为什么选择便携式ASCII?

我需要在不同的类中处理ASCII字符,并且在将此功能添加到“Portable UTF-8”之前,但这个库更模块化和便携,因为它没有依赖项。

需求和推荐

  • 运行此库不需要任何扩展。便携式ASCII只需要默认可用的PCRE库,自PHP 4.2.0以来就可以使用,并且自PHP 5.3.0以来无法禁用。PCRE中对ASCII处理的"\u"修饰符支持不是必须的。
  • PHP 7.0是最低要求
  • PHP 8.0也受支持

使用方法

示例:ASCII::to_ascii()

  echo ASCII::to_ascii('�Düsseldorf�', 'de');
  
  // will output
  // Duesseldorf

  echo ASCII::to_ascii('�Düsseldorf�', 'en');
  
  // will output
  // Dusseldorf

便携式ASCII | API

"ASCII"类的API被编写为小的静态方法。

类方法

charsArray(bool $replace_extra_symbols): array

返回ASCII方法的替换数组。

示例:$array = ASCII::charsArray(); var_dump($array['ru']['б']); // 'b'

参数

  • bool $replace_extra_symbols [可选] <p>添加一些额外的替换,例如 "£" 替换为 "pound"。</p>

返回值

  • array

charsArrayWithMultiLanguageValues(bool $replace_extra_symbols): array

返回ASCII方法的替换数组,其中包含多种语言的混合。

示例:$array = ASCII::charsArrayWithMultiLanguageValues(); var_dump($array['b']); // ['β', 'б', 'ဗ', 'ბ', 'ب']

参数

  • bool $replace_extra_symbols [可选] <p>添加一些额外的替换,例如 "£" 替换为 "pound"。</p>

返回值

  • array <p>替换数组。</p>

charsArrayWithOneLanguage(string $language, bool $replace_extra_symbols, bool $asOrigReplaceArray): array

返回一个用于单语言ASCII方法的替换数组。

例如,德语将 'ä' 映射到 'ae',而其他语言将直接返回例如 'a'。

示例: $array = ASCII::charsArrayWithOneLanguage('ru'); $tmpKey = \array_search('yo', $array['replace']); echo $array['orig'][$tmpKey]; // 'ё'

参数

  • ASCII::* $language [可选] <p>源字符串的语言,例如:en、de_at 或 de-ch。(默认为 'en')| ASCII::*_LANGUAGE_CODE</p>
  • bool $replace_extra_symbols [可选] <p>添加一些额外的替换,例如 "£" 替换为 "pound"。</p>
  • bool $asOrigReplaceArray [可选] <p>TRUE === 返回 {orig: string[], replace: string[]} 数组</p>

返回值

  • array <p>替换数组。</p>

charsArrayWithSingleLanguageValues(bool $replace_extra_symbols, bool $asOrigReplaceArray): array

返回用于多语言ASCII方法的替换数组。

示例: $array = ASCII::charsArrayWithSingleLanguageValues(); $tmpKey = \array_search('hnaik', $array['replace']); echo $array['orig'][$tmpKey]; // '၌'

参数

  • bool $replace_extra_symbols [可选] <p>添加一些额外的替换,例如 "£" 替换为 "pound"。</p>
  • bool $asOrigReplaceArray [可选] <p>TRUE === 返回 {orig: string[], replace: string[]} 数组</p>

返回值

  • array <p>替换数组。</p>

clean(string $str, bool $normalize_whitespace, bool $keep_non_breaking_space, bool $normalize_msword, bool $remove_invisible_characters): string

接受一个字符串,并从中移除所有非UTF-8字符以及所需时额外的字符。

参数

  • string $str <p>要净化的字符串.</p>
  • bool $normalize_whitespace [可选] <p>设置为 true,如果您需要规范化空白字符.</p>
  • bool $keep_non_breaking_space [可选] <p>设置为 true,以保持非断行空格,与 $normalize_whitespace 结合使用.</p>
  • bool $normalize_msword [可选] <p>设置为 true,如果您需要规范化 MS Word 字符,例如:"…" => "..."</p>
  • bool $remove_invisible_characters [可选] <p>设置为 false,如果您不想删除不可见字符,例如:"\0"</p>

返回值

  • string <p>一个干净的 UTF-8 字符串.</p>

getAllLanguages(): string[]

从常量 "ASCII::.*LANGUAGE_CODE" 获取所有语言。

参数:

返回值

  • string[]

is_ascii(string $str): bool

检查一个字符串是否是7位ASCII。

示例: ASCII::is_ascii('白'); // false

参数

  • string $str <p>要检查的字符串.</p>

返回值

  • `bool

    true 如果它是ASCII
    false 否则

`

normalize_msword(string $str): string

返回一个字符串,其中Windows-1252(通常用于Word文档)中的智能引号、省略号字符和破折号被它们的ASCII等价物替换。

示例: ASCII::normalize_msword('„Abcdef…”'); // '"Abcdef..."'

参数

  • string $str <p>要规范化的字符串.</p>

返回值

  • string <p>一个字符串,其中具有在Word文档中常用字符的规范化字符.</p>

normalize_whitespace(string $str, bool $keepNonBreakingSpace, bool $keepBidiUnicodeControls, bool $normalize_control_characters): string

规范化空白。

示例: ASCII::normalize_whitespace("abc-\xc2\xa0-öäü-\xe2\x80\xaf-\xe2\x80\xac", true); // "abc-\xc2\xa0-öäü- -"

参数

  • string $str <p>要规范化的字符串.</p>
  • bool $keepNonBreakingSpace [可选] <p>设置为 true,以保持非断行空格.</p>
  • bool $keepBidiUnicodeControls [可选] <p>设置为 true,以保持不可打印(对于Web)的双向文本字符.</p>
  • bool $normalize_control_characters [可选] <p>设置为 true,以将例如行分隔符和段落分隔符转换为 "\n" 以及行制表符转换为 "\t".</p>

返回值

  • string <p>一个具有规范化空白的字符串.</p>

remove_invisible_characters(string $str, bool $url_encoded, string $replacement, bool $keep_basic_control_characters): string

从字符串中删除不可见字符。

例如:这可以防止在ASCII字符之间嵌入空字符,如Java\0script。

复制并粘贴自 https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/Common.php

参数

  • string $str
  • bool $url_encoded
  • string $replacement
  • bool $keep_basic_control_characters

返回值

  • string

to_ascii(string $str, string $language, bool $remove_unsupported_chars, bool $replace_extra_symbols, bool $use_transliterate, bool|null $replace_single_chars_only): string

返回字符串的ASCII版本。一组非ASCII字符将被替换为它们最近的ASCII对应字符,其余的默认情况下被删除。可以提供源字符串的语言或区域设置,以便在以下任何格式中进行语言特定的转写:en、en_GB或en-GB。例如,传入“de”将导致“äöü”映射到“aeoeue”,而不是像其他语言中的“aou”。

示例: ASCII::to_ascii('�Düsseldorf�', 'en'); // Dusseldorf

参数

  • string $str <p>输入字符串.</p>
  • ASCII::* $language [optional] <p>源字符串的语言。(默认为'en')| ASCII::*_LANGUAGE_CODE</p>
  • bool $remove_unsupported_chars [optional] <p>是否删除不支持的字符.</p>
  • bool $replace_extra_symbols [可选] <p>添加一些额外的替换,例如 "£" 替换为 "pound"。</p>
  • bool $use_transliterate [optional] <p>使用ASCII::to_transliterate()处理未知字符.</p>
  • bool|null $replace_single_chars_only [optional] <p>单字符替换性能更好,但某些语言需要同时替换多个字符。| NULL表示自动设置,取决于语言</p>

返回值

  • string <p>仅包含ASCII字符的字符串.</p>

to_ascii_remap(string $str1, string $str2): string[]

警告:此方法将返回损坏的字符,仅用于特殊案例。

将两个UTF-8编码的字符串转换为适合需要在转换后具有相同长度的函数的单字节字符串。

该函数简单使用(并更新)一个定制的动态编码(输入/输出映射参数),其中非ASCII字符按出现的顺序重新映射到[128-255]的范围。

参数

  • string $str1
  • string $str2

返回值

  • string[]

to_filename(string $str, bool $use_transliterate, string $fallback_char): string

将给定的字符串转换为安全的文件名(并保留字符串大小写)。

示例: ASCII::to_filename('שדגשדג.png', true)); // 'shdgshdg.png'

参数

  • string $str
  • bool $use_transliterate <p>默认使用ASCII::to_transliterate() - 不安全的字符将被替换为连字符否则.</p>
  • string $fallback_char

返回值

  • string <p>包含适用于文件名的安全字符的字符串.</p>

to_slugify(string $str, string $separator, string $language, string[] $replacements, bool $replace_extra_symbols, bool $use_str_to_lower, bool $use_transliterate): string

将字符串转换为URL别名。这包括将非ASCII字符替换为其最近的ASCII等效字符,删除剩余的非ASCII和非字母数字字符,并用$separator替换空格。分隔符默认为一个短横线,字符串也转换为小写。源字符串的语言也可以提供,以进行语言特定的转写。

参数

  • string $str
  • string $separator [optional] <p>用于替换空格的字符串.</p>
  • ASCII::* $language [optional] <p>源字符串的语言。(默认为'en')| ASCII::*_LANGUAGE_CODE</p>
  • array<string, string> $replacements [optional] <p>可替换字符串的映射.</p>
  • bool $replace_extra_symbols [可选] <p>添加一些额外的替换,例如 "£" 替换为 "pound"。</p>
  • bool $use_str_to_lower [optional] <p>对输入使用"字符串转小写"。</p>
  • bool $use_transliterate [optional] <p>使用ASCII::to_transliterate()处理未知字符.</p>

返回值

  • string <p>已转换为URL别名的字符串.</p>

to_transliterate(string $str, string|null $unknown, bool $strict): string

返回字符串的ASCII版本。一组非ASCII字符将被替换为其最近的ASCII对应字符,除非另有指示,否则其余字符将被删除。

示例:ASCII::to_transliterate('déjà σσς iıii'); // 'deja sss iiii'

参数

  • string $str <p>输入字符串.</p>
  • string|null $unknown [可选] <p>如果字符未知,则使用的字符。(默认为 '?') 但您也可以使用 NULL 以保留未知字符。</p>
  • bool $strict [可选] <p>使用 PHP-Intl 中的 "transliterator_transliterate()"</p>

返回值

  • string <p>只包含ASCII字符的字符串。</p>

单元测试

  1. 运行测试需要Composer作为前提条件。
composer install
  1. 可以从根目录运行以下命令来执行测试
./vendor/bin/phpunit

支持

有关支持和支持,请访问 Github | 问题 | PayPal | Patreon

有关状态更新和发布公告,请访问 发布 | Twitter | Patreon

有关专业支持,请联系

谢谢

  • 感谢 GitHub (Microsoft) 为代码提供托管,以及良好的基础设施,包括问题管理等。
  • 感谢 IntelliJ,他们为PHP提供了最好的IDE,并为我提供了PhpStorm的开源许可证!
  • 感谢 Travis CI,它是最好的、最简单的持续集成工具!
  • 感谢 StyleCI 提供简单但强大的代码风格检查。
  • 感谢 PHPStan 以及 Psalm 提供真正出色的静态分析工具,并在代码中发现错误!

许可证和版权

在MIT许可下发布 - 详细信息请参阅 LICENSE.txt