PluginProbe ʕ •ᴥ•ʔ
WooCommerce Square / 5.4.3
WooCommerce Square v5.4.3
5.4.3 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 Coupon_Utility.php 5 months ago Encryption_Utility.php 2 years ago Helper.php 4 months ago Money_Utility.php 3 years ago Order_Ajax_Authorization.php 2 months ago Performance_Logger.php 1 year ago String_Utility.php 9 months ago Token_Scope_Utility.php 5 months ago
String_Utility.php
171 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 // Remove HTML tags.
82 $string = wp_strip_all_tags( $string );
83
84 // Encode HTML special characters.
85 $string = htmlspecialchars( $string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 );
86
87 // strip ASCII chars 32 and under; 127 and higher
88 return filter_var( $string, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH );
89 }
90
91 /**
92 * Returns true if the haystack string starts with needle
93 *
94 * Note: case-sensitive
95 *
96 * See Square_Helper::str_starts_with()
97 *
98 * @since 2.2.0
99 * @param string $haystack
100 * @param string $needle
101 * @return bool
102 */
103 public static function str_starts_with( $haystack, $needle ) {
104
105 if ( self::multibyte_loaded() ) {
106
107 if ( '' === $needle ) {
108 return true;
109 }
110
111 return 0 === mb_strpos( $haystack, $needle, 0, self::MB_ENCODING );
112
113 } else {
114
115 $needle = self::to_ascii( $needle );
116
117 if ( '' === $needle ) {
118 return true;
119 }
120
121 return 0 === strpos( self::to_ascii( $haystack ), self::to_ascii( $needle ) );
122 }
123 }
124
125 /**
126 * Returns true if the needle exists in haystack
127 *
128 * Note: case-sensitive
129 *
130 * See Square_Helper::str_exists()
131 *
132 * @since 2.2.0
133 * @param string $haystack
134 * @param string $needle
135 * @return bool
136 */
137 public static function str_exists( $haystack, $needle ) {
138
139 if ( self::multibyte_loaded() ) {
140
141 if ( '' === $needle ) {
142 return false;
143 }
144
145 return false !== mb_strpos( $haystack, $needle, 0, self::MB_ENCODING );
146
147 } else {
148
149 $needle = self::to_ascii( $needle );
150
151 if ( '' === $needle ) {
152 return false;
153 }
154
155 return false !== strpos( self::to_ascii( $haystack ), self::to_ascii( $needle ) );
156 }
157 }
158
159 /**
160 * Helper method to check if the multibyte extension is loaded, which
161 * indicates it's safe to use the mb_*() string methods
162 *
163 * @since 2.2.0
164 * @return bool
165 */
166 protected static function multibyte_loaded() {
167
168 return extension_loaded( 'mbstring' );
169 }
170 }
171