PluginProbe ʕ •ᴥ•ʔ
WooCommerce Square / 3.8.1
WooCommerce Square v3.8.1
5.4.2 5.4.1 5.4.0 trunk 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.7.0 2.8.0 2.9.0 2.9.1 3.0.0 3.0.1 3.0.2 3.0.3 3.1.0 3.2.0 3.3.0 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.7.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 4.0.0 4.1.0 4.2.0 4.2.1 4.2.2 4.2.3 4.3.0 4.3.1 4.3.2 4.4.0 4.4.1 4.4.2 4.5.0 4.5.1 4.5.2 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.8.0 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.8.7 4.8.8 4.9.0 4.9.1 4.9.2 4.9.3 4.9.4 4.9.5 4.9.6 4.9.7 4.9.8 4.9.9 5.0.0 5.0.1 5.1.0 5.1.1 5.1.2 5.2.0 5.3.0 5.3.1 5.3.2 5.3.3
woocommerce-square / includes / Utilities / String_Utility.php
woocommerce-square / includes / Utilities Last commit date
Array_Utility.php 3 years ago Encryption_Utility.php 3 years ago Helper.php 3 years ago Money_Utility.php 3 years ago String_Utility.php 3 years ago
String_Utility.php
168 lines
1 <?php
2 /**
3 * WooCommerce Square
4 *
5 * This source file is subject to the GNU General Public License v3.0
6 * that is bundled with this package in the file license.txt.
7 * It is also available through the world-wide-web at this URL:
8 * http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later
9 * If you did not receive a copy of the license and are unable to
10 * obtain it through the world-wide-web, please send an email
11 * to license@woocommerce.com so we can send you a copy immediately.
12 *
13 * DISCLAIMER
14 *
15 * Do not edit or add to this file if you wish to upgrade WooCommerce Square to newer
16 * versions in the future. If you wish to customize WooCommerce Square for your
17 * needs please refer to https://docs.woocommerce.com/document/woocommerce-square/
18 *
19 * @author WooCommerce
20 * @copyright Copyright: (c) 2019, Automattic, Inc.
21 * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 or later
22 */
23
24 namespace WooCommerce\Square\Utilities;
25
26 defined( 'ABSPATH' ) || exit;
27
28 /**
29 * Helper for dealing with String values.
30 *
31 * @since 2.2.0
32 */
33 class String_Utility {
34
35 /**
36 * encoding used for mb_*() string functions
37 **/
38 const MB_ENCODING = 'UTF-8';
39
40 /**
41 * Truncates $string after a given $length if string is longer than
42 * $length.
43 *
44 * The last characters will be replaced with the $omission string
45 * for a total length not exceeding $length
46 *
47 * See Square_Helper::str_truncate()
48 *
49 * @since 2.2.0
50 * @param string $string text to truncate
51 * @param int $length total desired length of string, including omission
52 * @param string $omission omission text, defaults to '...'
53 * @return string
54 */
55 public static function truncate( $string, $length, $omission = '...' ) {
56 $string = self::to_ascii( $string );
57
58 // bail if string doesn't need to be truncated
59 if ( strlen( $string ) <= $length ) {
60 return $string;
61 }
62
63 $length -= strlen( $omission );
64
65 return substr( $string, 0, $length ) . $omission;
66 }
67
68 /**
69 * Returns a string with all non-ASCII characters removed. This is useful
70 * for any string functions that expect only ASCII chars and can't
71 * safely handle UTF-8. Note this only allows ASCII chars in the range
72 * 33-126 (newlines/carriage returns are stripped)
73 *
74 * See Square_Helper::to_ascii()
75 *
76 * @since 2.2.0
77 * @param string $string string to make ASCII
78 * @return string
79 */
80 public static function to_ascii( $string ) {
81 // strip ASCII chars 32 and under
82 $string = filter_var( $string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW );
83
84 // strip ASCII chars 127 and higher
85 return filter_var( $string, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH );
86 }
87
88 /**
89 * Returns true if the haystack string starts with needle
90 *
91 * Note: case-sensitive
92 *
93 * See Square_Helper::str_starts_with()
94 *
95 * @since 2.2.0
96 * @param string $haystack
97 * @param string $needle
98 * @return bool
99 */
100 public static function str_starts_with( $haystack, $needle ) {
101
102 if ( self::multibyte_loaded() ) {
103
104 if ( '' === $needle ) {
105 return true;
106 }
107
108 return 0 === mb_strpos( $haystack, $needle, 0, self::MB_ENCODING );
109
110 } else {
111
112 $needle = self::to_ascii( $needle );
113
114 if ( '' === $needle ) {
115 return true;
116 }
117
118 return 0 === strpos( self::to_ascii( $haystack ), self::to_ascii( $needle ) );
119 }
120 }
121
122 /**
123 * Returns true if the needle exists in haystack
124 *
125 * Note: case-sensitive
126 *
127 * See Square_Helper::str_exists()
128 *
129 * @since 2.2.0
130 * @param string $haystack
131 * @param string $needle
132 * @return bool
133 */
134 public static function str_exists( $haystack, $needle ) {
135
136 if ( self::multibyte_loaded() ) {
137
138 if ( '' === $needle ) {
139 return false;
140 }
141
142 return false !== mb_strpos( $haystack, $needle, 0, self::MB_ENCODING );
143
144 } else {
145
146 $needle = self::to_ascii( $needle );
147
148 if ( '' === $needle ) {
149 return false;
150 }
151
152 return false !== strpos( self::to_ascii( $haystack ), self::to_ascii( $needle ) );
153 }
154 }
155
156 /**
157 * Helper method to check if the multibyte extension is loaded, which
158 * indicates it's safe to use the mb_*() string methods
159 *
160 * @since 2.2.0
161 * @return bool
162 */
163 protected static function multibyte_loaded() {
164
165 return extension_loaded( 'mbstring' );
166 }
167 }
168