字符串函数

另请参见

要了解更多功能强大的字符串处理和操作函数,请查看 Perl 兼容正则表达式函数。要使用多字节字符编码,请查看 多字节字符串函数

目录

  • addcslashes — 用 C 风格的斜杠引用字符串
  • addslashes — 用斜杠引用字符串
  • bin2hex — 将二进制数据转换为十六进制表示形式
  • chop — rtrim 的别名
  • chr — 从数字生成单字节字符串
  • chunk_split — 将字符串拆分为较小的块
  • convert_cyr_string — 将一种西里尔字符集转换为另一种
  • convert_uudecode — 解码 uuencoded 字符串
  • convert_uuencode — Uuencode 字符串
  • count_chars — 返回有关字符串中使用的字符的信息
  • crc32 — 计算字符串的 crc32 多项式
  • crypt — 单向字符串散列
  • echo — 输出一个或多个字符串
  • explode — 用字符串分割字符串
  • fprintf — 将格式化的字符串写入流
  • get_html_translation_table — 返回 htmlspecialchars 和 htmlentities 使用的转换表
  • hebrev — 将逻辑希伯来语文本转换为视觉文本
  • hebrevc — 将逻辑希伯来语文本转换为视觉文本,并转换换行符
  • hex2bin — 解码十六进制编码的二进制字符串
  • html_entity_decode — 将 HTML 实体转换为相应的字符
  • htmlentities — 将所有适用的字符转换为 HTML 实体
  • htmlspecialchars — 将特殊字符转换为 HTML 实体
  • htmlspecialchars_decode — 将特殊 HTML 实体转换回字符
  • implode — 用字符串连接数组元素
  • join — implode 的别名
  • lcfirst — 将字符串的第一个字符设为小写
  • levenshtein — 计算两个字符串之间的 Levenshtein 距离
  • localeconv — 获取数字格式信息
  • ltrim — 从字符串开头去除空格(或其他字符)
  • md5 — 计算字符串的 md5 哈希值
  • md5_file — 计算给定文件的 md5 哈希值
  • metaphone — 计算字符串的元音键
  • money_format — 将数字格式化为货币字符串
  • nl_langinfo — 查询语言和区域设置信息
  • nl2br — 在字符串中的所有换行符之前插入 HTML 换行符
  • number_format — 用分组的千位数格式化数字
  • ord — 将字符串的第一个字节转换为 0 到 255 之间的值
  • parse_str — 将字符串解析为变量
  • print — 输出字符串
  • printf — 输出格式化的字符串
  • quoted_printable_decode — 将可打印引用字符串转换为 8 位字符串
  • quoted_printable_encode — 将 8 位字符串转换为可打印引用字符串
  • quotemeta — 引用元字符
  • rtrim — 从字符串末尾去除空格(或其他字符)
  • setlocale — 设置区域设置信息
  • sha1 — 计算字符串的 sha1 哈希值
  • sha1_file — 计算文件的 sha1 哈希值
  • similar_text — 计算两个字符串之间的相似度
  • soundex — 计算字符串的 soundex 键
  • sprintf — 返回格式化的字符串
  • sscanf — 根据格式解析来自字符串的输入
  • str_contains — 确定字符串是否包含给定的子字符串
  • str_decrement — 递减字母数字字符串
  • str_ends_with — 检查字符串是否以给定的子字符串结尾
  • str_getcsv — 将 CSV 字符串解析为数组
  • str_increment — 增加字母数字字符串
  • str_ireplace — str_replace 的不区分大小写的版本
  • str_pad — 用另一个字符串将字符串填充到特定长度
  • str_repeat — 重复字符串
  • str_replace — 将字符串中的所有搜索字符串替换为替换字符串
  • str_rot13 — 对字符串执行 rot13 转换
  • str_shuffle — 随机打乱字符串
  • str_split — 将字符串转换为数组
  • str_starts_with — 检查字符串是否以给定的子字符串开头
  • str_word_count — 返回有关字符串中使用的单词的信息
  • strcasecmp — 不区分大小写的二进制安全的字符串比较
  • strchr — strstr 的别名
  • strcmp — 二进制安全的字符串比较
  • strcoll — 基于区域设置的字符串比较
  • strcspn — 查找不匹配掩码的初始段的长度
  • strip_tags — 从字符串中去除 HTML 和 PHP 标记
  • stripcslashes — 取消用 addcslashes 引用的字符串的引用
  • stripos — 在字符串中查找不区分大小写的子字符串的首次出现位置
  • stripslashes — 取消引用的引用字符串
  • stristr — 不区分大小写的 strstr
  • strlen — 获取字符串长度
  • strnatcasecmp — 使用“自然顺序”算法进行不区分大小写的字符串比较
  • strnatcmp — 使用“自然顺序”算法进行字符串比较
  • strncasecmp — 前 n 个字符的二进制安全的、不区分大小写的字符串比较
  • strncmp — 前 n 个字符的二进制安全的字符串比较
  • strpbrk — 在字符串中搜索一组字符中的任何一个
  • strpos — 在字符串中查找子字符串的首次出现位置
  • strrchr — 在字符串中查找字符的最后一次出现位置
  • strrev — 反转字符串
  • strripos — 在字符串中查找不区分大小写的子字符串的最后一次出现位置
  • strrpos — 在字符串中查找子字符串的最后一次出现位置
  • strspn — 查找字符串的初始段的长度,该段完全由给定掩码中包含的字符组成
  • strstr — 查找字符串的首次出现位置
  • strtok — 将字符串标记化
  • strtolower — 将字符串设为小写
  • strtoupper — 将字符串设为大写
  • strtr — 转换字符或替换子字符串
  • substr — 返回字符串的一部分
  • substr_compare — 从偏移量开始,最多比较 length 个字符的两个字符串的二进制安全比较
  • substr_count — 统计子字符串出现的次数
  • substr_replace — 替换字符串一部分中的文本
  • trim — 从字符串开头和结尾去除空格(或其他字符)
  • ucfirst — 将字符串的第一个字符设为大写
  • ucwords — 将字符串中每个单词的第一个字符设为大写
  • utf8_decode — 将字符串从 UTF-8 转换为 ISO-8859-1,替换无效或不可表示的字符
  • utf8_encode — 将字符串从 ISO-8859-1 转换为 UTF-8
  • vfprintf — 将格式化的字符串写入流
  • vprintf — 输出格式化的字符串
  • vsprintf — 返回格式化的字符串
  • wordwrap — 将字符串换行到给定数量的字符
添加备注

用户贡献的备注 24 备注

17
lrirwin at alum dot wustl dot edu
2 年前
我正在转换 30 年前的代码,需要一个字符串 TAB 函数

//类似于旧版BASIC语言中使用的TAB键的制表符函数
//尽管其中一些在字符串比请求的位置更长时不会截断
//比请求的位置更长
function tab($instring="",$topos=0){
if(strlen($instring)<$topos){
$result=str_pad($instring,$topos-1," ",STR_PAD_RIGHT);
}else{
$result=substr($instring,0,$topos-1);
}
return $result;
}

$pline="带有此制表符到50的字符串和";
$tline=tab($pline,50)."结束它。";
echo $tline.PHP_EOL;
$pline="101010101020202020203030303030404040404050505050506060606060";
$tline=tab($pline,50)."结束它。";
echo $tline.PHP_EOL;

//结果输出
//带有此制表符到50的字符串和结束它。
//1010101010202020202030303030304040404040505050505结束它。
-1
kristin at greenapple dot on dot ca
19 年前
我确实搜索过一个可以执行此操作的函数,因为我在其他语言中见过它,但我在这里找不到它。当与 substr() 结合使用时,这对于获取字符串的第一个部分到某个特定点尤其有用。

strnpos() - 在干草堆中查找针的第 n 个位置。

<?php

function strnpos($haystack, $needle, $occurance, $pos = 0) {

for (
$i = 1; $i <= $occurance; $i++) {
$pos = strpos($haystack, $needle, $pos) + 1;
}
return
$pos - 1;

}

?>

示例:给我所有内容,直到“/”的第四次出现。

<?php

$haystack
= "/home/username/www/index.php";
$needle = "/";

$root_dir = substr($haystack, 0, strnpos($haystack, $needle, 4));

echo
$root_dir;

?>

返回:/home/username/www

将此示例与服务器变量 $_SERVER['SCRIPT_NAME'] 作为干草堆一起使用,您可以自动发现文档的根目录,以便自动定位全局文件!
-2
admin at fivestarbuy dot com
18 年前
此示例允许您解析未解析的字符串变量。警告:如果您允许用户通过此引擎传递 $variables,这可能会导致安全漏洞。我建议仅将此用于您的内容管理系统。

<?
$mytime=time();
$mydog="我的狗吃了我的 PHP!";

# 您的解析字符串
$s1 = '连字符变量保留:$mytime 和 $mydog';
echo "之前:<br><br>$s1<br><br>";

# 请记住,无论您在何处定义它,它都不会全局定义到函数中
# 这就是我们在此处定义它的原因。全局定义它可能会导致安全问题。
$vardata=get_defined_vars();

# 解析字符串
$s1 = StrParse($s1,$vardata);

echo "之后:<br><br>$s1";

function StrParse($str,$vardata) {
# 接受包含 PHP 变量的字符串或数据段

# 例如,未解析的变量,如:使用时间测试:$mytime
# 此示例显示 $mytime,而不是实际的变量值。
# 最终结果显示 $mytime 的实际变量值。

# 这对于构建内容管理系统非常有用,
# 以及将您的变量定向到您的内容数据中,
# 内容存储在文件或数据库中,未解析。
# 当然,这可能会减慢页面加载速度,但它是一种很好的方法
# 将当前变量中的数据解析到您加载的新数据中
# 使其兼容。

# 然后,变量将被实际变量替换..
$getvarkeys=array_keys($vardata);
$ret=$str;
for ($x=0; $x < count($getvarkeys); $x++) {
$myvar=$getvarkeys[$x];
#echo "变量: " . $myvar . " [" . $vardata[$myvar] . "]<br>";
$ret=str_replace('$' . $myvar, $vardata[$myvar], $ret);
}
return $ret;

}

?>
-8
[tab!]
19 年前
//
// string strtrmvistl( string str, [int maxlen = 64],
// [bool right_justify = false],
// [string delimter = "<br>\n"])
//
// 将一个长字符串拆分为两个块(起始块和结束块)
// 给定最大长度,并用给定分隔符分隔它们。
// 第二个块可以在 maxlen 内右对齐。
// 可用于将字符串“分散”在两行上。
//

function strtrmvistl($str, $maxlen = 64, $right_justify = false, $delimter = "<br>\n") {
if(($len = strlen($str = chop($str))) > ($maxlen = max($maxlen, 12))) {
$newstr = substr($str, 0, $maxlen - 3);

if($len > ($maxlen - 3)) {
$endlen = min(($len - strlen($newstr)), $maxlen - 3);
$newstr .= "..." . $delimter;

if($right_justify)
$newstr .= str_pad('', $maxlen - $endlen - 3, ' ');

$newstr .= "..." . substr($str, $len - $endlen);
}

return($newstr);
}

return($str);
}
-10
Anonymous
19 年前
回复 hackajar <matt> yahoo <trot> com,

没有字符串到数组的函数,因为它没有必要。如果您像使用数组一样使用偏移量引用字符串,则将返回该偏移量处的字符。这在第 III.11 节的“字符串”文章中的“按字符访问和修改字符串”标题下有记载。
-9
terry dot greenlaw at logicalshift dot com
20 年前
以下是一种更简单的“最简单”方法,用于为 Web 背景切换一组 1..n 颜色

<?php
$colours
= array('#000000', '#808080', '#A0A0A0', '#FFFFFF');

// 获取颜色
$color = next($colors) or $color = reset($colors);
?>

代码不需要了解正在循环遍历的元素数量。这样,您就不必在更改颜色数量或颜色值时追踪所有代码。
-9
admin at rotarymulundeast dot org
18 年前
以下是一种更轻松地查找第 n 个的方法...

function nth($numbex){
if ($numbex%10 == 1 && $numbex%100 != 11) $sth='st';
elseif ($numbex%10 == 2 && $numbex%100 != 12) $sth='nd';
elseif ($numbex%10 == 3 && $numbex%100 != 13) $sth='rd';
else $sth = 'th';
return $sth;
}

无需检查用户是否输入了非整数,因为我们可能将此函数用于表达变量,例如 x 的第 i 个值、z 的第 n 个根等等...
-10
james dot d dot baker at gmail dot com
19 年前
<?php
/*
作者:James Baker,2005 年 5 月 27 日

sentenceCase($string);
$string:要转换为句子大小写的字符串。

将字符串转换为正确的句子大小写(每个句子的第一个字母大写,其余字母小写)

示例用法:
echo sentenceCase("HELLO WORLD!!! THIS IS A CAPITALISED SENTENCE. this isn't.");

返回:
Hello world!!! This is a capitalised sentence. This isn't.
*/

function sentenceCase($s){
$str = strtolower($s);
$cap = true;

for(
$x = 0; $x < strlen($str); $x++){
$letter = substr($str, $x, 1);
if(
$letter == "." || $letter == "!" || $letter == "?"){
$cap = true;
}elseif(
$letter != " " && $cap == true){
$letter = strtoupper($letter);
$cap = false;
}

$ret .= $letter;
}

return
$ret;
}
?>
-12
Verdauga
16 年前
关于 bloopletech 下面几篇文章中的一点说明

将数字转换为文本时不应使用“and”。“And”(至少在美国英语中)只应用于表示小数点。

示例
1,796,706 => 一百万七百九十六千七百零六。
594,359.34 => 五十九万三千五百九点三十四百分之一。
-11
str at maphpia dot com
11 年前
我一直在寻找一个函数来查找两个不同字符串中的公共子字符串。我尝试了此处列出的 mb_string_intersect 和 string_intersect 函数,但它们对我不起作用。我在 http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Longest_common_substring#PHP 中找到了算法,所以我在此处发布了该函数

<?php

/**
* 查找两个字符串之间的匹配字符串
*
* @param string $string1
* @param string $string2
* @param number $minChars
*
* @return NULL|string
*
* @link http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Longest_common_substring#PHP
*/
function string_intersect($string_1, $string_2)
{
$string_1_length = strlen($string_1);
$string_2_length = strlen($string_2);
$return = "";

if (
$string_1_length === 0 || $string_2_length === 0) {
// 没有相似之处
return $return;
}

$longest_common_subsequence = array();

// 初始化 CSL 数组,假设没有相似之处
for ($i = 0; $i < $string_1_length; $i++) {
$longest_common_subsequence[$i] = array();
for (
$j = 0; $j < $string_2_length; $j++) {
$longest_common_subsequence[$i][$j] = 0;
}
}

$largest_size = 0;

for (
$i = 0; $i < $string_1_length; $i++) {
for (
$j = 0; $j < $string_2_length; $j++) {
// 检查每个字符组合
if ($string_1[$i] === $string_2[$j]) {
// 这些在两个字符串中都相同
if ($i === 0 || $j === 0) {
// 它是第一个字符,因此很明显它只有 1 个字符长
$longest_common_subsequence[$i][$j] = 1;
} else {
// 它比前一个字符的字符串长一个字符
$longest_common_subsequence[$i][$j] = $longest_common_subsequence[$i - 1][$j - 1] + 1;
}

if (
$longest_common_subsequence[$i][$j] > $largest_size) {
// 将此记录为最大值
$largest_size = $longest_common_subsequence[$i][$j];
// 清除所有先前结果
$return = "";
// 然后继续记录此新值
}

if (
$longest_common_subsequence[$i][$j] === $largest_size) {
// 记录最大的字符串
$return = substr($string_1, $i - $largest_size + 1, $largest_size);
}
}
// 否则,$CSL 应设置为 0,它已经初始化为 0
}
}

// 返回匹配列表
return $return;
}
-12
andy a t onesandzeros d o t biz
19 年前
我经常使用这些小玩意儿。我只是想分享一下,也许可以帮别人节省一些时间。没什么大不了的。:)

// 如果 $str 以 $sub 开头,则返回 true
function beginsWith( $str, $sub ) {
return ( substr( $str, 0, strlen( $sub ) ) == $sub );
}

// 如果 $str 以 $sub 结尾,则返回 true
function endsWith( $str, $sub ) {
return ( substr( $str, strlen( $str ) - strlen( $sub ) ) == $sub );
}

// 从字符串的前面修剪掉 x 个字符
// 或者修剪掉 $off 中的匹配字符串
function trimOffFront( $off, $str ) {
if( is_numeric( $off ) )
return substr( $str, $off );
else
return substr( $str, strlen( $off ) );
}

// 从字符串的末尾修剪掉 x 个字符
// 或者修剪掉 $off 中的匹配字符串
function trimOffEnd( $off, $str ) {
if( is_numeric( $off ) )
return substr( $str, 0, strlen( $str ) - $off );
else
return substr( $str, 0, strlen( $str ) - strlen( $off ) );
}
-11
SteveRusin
18 年前
以下函数

function beginsWith( $str, $sub )
function endsWith( $str, $sub )

是正确的,但有缺陷。你需要使用 === 运算符而不是

function beginsWith( $str, $sub ) {
return ( substr( $str, 0, strlen( $sub ) ) === $sub );
}
function endsWith( $str, $sub ) {
return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub );
}

否则,endsWith 会将 "foobar.0" 结尾为 ".0" 以及 "0" 或 "00" 或任何数量的零,因为数值上 .0 等于 0。
-10
webmaster at cafe-clope dot net
19 年前
一个全面的串联函数,适用于数组和字符串

<?php
function str_cat() {
$args = func_get_args() ;

// 断言每个作为参数给出的数组都是 $dim 大小。
// 数组中的键被剥离。
// 如果找不到数组,则 $dim 保持未设置。
foreach($args as $key => $arg) {
if(
is_array($arg)) {
if(!isset(
$dim))
$dim = count($arg) ;
elseif(
$dim != count($arg))
return
FALSE ;
$args[$key] = array_values($arg) ;
}
}

// 串联
if(isset($dim)) {
$result = array() ;
for(
$i=0;$i<$dim;$i++) {
$result[$i] = '' ;
foreach(
$args as $arg)
$result[$i] .= ( is_array($arg) ? $arg[$i] : $arg ) ;
}
return
$result ;
} else {
return
implode($args) ;
}
}
?>

一个简单的例子

<?php
str_cat
(array(1,2,3), '-', array('foo' => 'foo', 'bar' => 'bar', 'noop' => 'noop')) ;
?>

将返回
Array (
[0] => 1-foo
[1] => 2-bar
[2] => 3-noop
)

更有用

<?php
$myget
= $_GET ; // 检索之前的 $_GET 值
$myget['foo'] = 'b a r' ; // 更改一个值
$myget = str_cat(array_keys($myget), '=', array_map('rawurlencode', array_values($myget))) ;
$querystring = implode(ini_get('arg_separator.output'), $myget)) ;
?>

将返回一个有效的查询字符串,其中一些值已更改。

注意,<?php str_cat('foo', '&', 'bar') ; ?> 将返回 'foo&bar',而 <?php str_cat(array('foo'), '&', 'bar') ; ?> 将返回 array(0 => foo&bar)
-11
Anonymous
18 年前
to: james dot d dot baker at gmail dot com

PHP 有一个内置函数可以执行你的函数所做的事情,

https://php.net/ucfirst
https://php.net/ucwords
-14
administrador(ensaimada)sphoera(punt)com
18 年前
我已经准备了这个简单的函数来获取标签之间分隔的字符串(不仅仅是 XML 标签!)。有人需要这样的东西吗?。

<?php

function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if (
$ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return
substr($string,$ini,$len);
}

$string = "this [custom] function is useless!!";
echo
get_string_between($string,"[","]");
// must return "custom";
?>
更多函数请访问 http://www.sphoera.com
-15
t0russ at gmail dot com
19 年前
致 kristin at greenaple dot on dot ca
感谢分享。
您的递归函数在速度上略快,并且当字符未找到时返回 false(如预期的那样),而不是数字 0
<?php
function strnposr($haystack, $needle, $occurance, $pos = 0) {
return (
$occurance<2)?strpos($haystack, $needle, $pos):strnposr($haystack,$needle,$occurance-1,strpos($haystack, $needle, $pos) + 1);
}
?>
-15
php at moechofe dot com
19 年前
<?php
/*
* str_match
*
* 返回一个仅包含表达式中定义的字符的字符串,如果表达式无效则返回 false
*
* @param $str string 字符串
* @param $match 基于 PCRE 正则表达式类定义的表达式。
* 类开头的 '[', ']', '\' 和 '^' 需要转义。
* 比如:-a-z0-9_@.
*/
function str_match( $str, $match )
{
$return = '';
if(
eregi( '(.*)', $match, $class ) )
{
$match = '['.$regs[1].']';
for(
$i=0; $i<strlen($str); $i++ )
if(
ereg( '['.$class[1].']', $str[$i] ) )
$return .= $str{$i};
return
$return;
}
else return
false;
}

/*
* 例子
* 仅接受来自 GET/POST 参数 'a' 的字母数字字符
*/

if( ! empty($_REQUEST['a']) )
$_REQUEST['a'] = str_match( $_REQUEST['a'], 'a-zA-Z0-9' );
else
$_REQUEST['a'] = 'default';
?>
-11
navarr at gmail dot com
18 年前
适用于 PHP4.x 的 stripos

<?php
function stripos($haystack,$needle) {
return
strpos(strtoupper($haystack),strtoupper($needle));
}
?>
-11
mike &#34;eyes&#34; moe
17 年前
这是一个真正随机的字符串生成器,它使用最常见的字符串函数,可以在任何地方使用。

<?php
function random_string($max = 20){
$chars = explode(" ", "a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9");
for(
$i = 0; $i < $max; $i++){
$rnd = array_rand($chars);
$rtn .= base64_encode(md5($chars[$rnd]));
}
return
substr(str_shuffle(strtolower($rtn)), 0, $max);
}
?>
-14
Stephen Dewey
15 年前
如果您需要一个函数返回字符串中到第 N 次出现的子字符串为止的所有文本,请尝试以下函数。

适用于 PHP >= 5。

(Pommef 在下面提供了另一个用于此目的的示例函数,但我认为它是不正确的。)

<?php

// 返回 $haystack 中直到(但不包括)$needle 第 $n_occurrence 次出现的所有内容。 因此:
// 如果 $haystack 中 $needle 的出现次数 < $n_occurrence,则将返回整个字符串。
// 如果 $haystack 中 $needle 的出现次数 >= $n_occurrence,则返回的字符串将在第 $n_occurrence 次 $needle 之前结束。
// 此函数仅在 $n_occurrence >= 1 时有意义
function nsubstr($needle, $haystack, $n_occurrence)
{
// 使用 $needle 进行 explode 后,$arr 中除最后一个条目(可能)的部分之外的所有条目都应返回其内容。
$arr = explode($needle,$haystack,$n_occurrence);
// 检查 $arr 中的最后一个条目。 如果它包含 $needle,则剪切所有文本,除了 $needle 之前的文本。
$last = count($arr) - 1;
$pos_in_last = strpos($arr[$last],$needle);

if (
$pos_in_last !== false)
$arr[$last] = substr($arr[$last],0,$pos_in_last);

return
implode($needle,$arr);
}

$string = 'd24jkdslgjldk2424jgklsjg24jskgldjk24';

print
'S: ' . $string . '<br>';
print
'1: ' . nsubstr('24',$string,1) . '<br>';
print
'2: ' . nsubstr('24',$string,2) . '<br>';
print
'3: ' . nsubstr('24',$string,3) . '<br>';
print
'4: ' . nsubstr('24',$string,4) . '<br>';
print
'5: ' . nsubstr('24',$string,5) . '<br>';
print
'6: ' . nsubstr('24',$string,6) . '<br>';
print
'7: ' . nsubstr('24',$string,7) . '<br>';

/*
// 输出结果:
S: d24jkdslgjldk2424jgklsjg24jskgldjk24
1: d
2: d24jkdslgjldk
3: d24jkdslgjldk24
4: d24jkdslgjldk2424jgklsjg
5: d24jkdslgjldk2424jgklsjg24jskgldjk
6: d24jkdslgjldk2424jgklsjg24jskgldjk24
7: d24jkdslgjldk2424jgklsjg24jskgldjk24
*/

?>

请注意,此函数可以与 wordwrap() 结合使用来实现一个常规但相当困难的网页设计目标,即限制内联 HTML 文本到一定行数。 wordwrap() 可以使用 <br> 来拆分字符串,然后你可以使用此函数来仅返回直到第 N 个 <br> 的文本。

你仍然需要对 wordwrap() 中每行的最大字符数进行保守的估计,但你比直接使用 substr() 截断多行字符串更加精确。

请查看示例

<?php

$text
= 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque id massa. Duis sollicitudin ipsum vel diam. Aliquam pulvinar sagittis felis. Nullam hendrerit semper elit. Donec convallis mollis risus. Cras blandit mollis turpis. Vivamus facilisis, sapien at tincidunt accumsan, arcu dolor suscipit sem, tristique convallis ante ante id diam. Curabitur mollis, lacus vel gravida accumsan, enim quam condimentum est, vitae rutrum neque magna ac enim.';

$wrapped_text = wordwrap($text,100,'<br>',true);

$three_lines = nsubstr('<br>',$wrapped_text,3);

print
'<br><br>' . $three_lines;

$four_lines = nsubstr('<br>',$wrapped_text,4);

print
'<br><br>' . $four_lines;

/*
输出结果:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque id massa. Duis sollicitudin
ipsum vel diam. Aliquam pulvinar sagittis felis. Nullam hendrerit semper elit. Donec convallis
mollis risus. Cras blandit mollis turpis. Vivamus facilisis, sapien at tincidunt accumsan, arcu

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque id massa. Duis sollicitudin
ipsum vel diam. Aliquam pulvinar sagittis felis. Nullam hendrerit semper elit. Donec convallis
mollis risus. Cras blandit mollis turpis. Vivamus facilisis, sapien at tincidunt accumsan, arcu
dolor suscipit sem, tristique convallis ante ante id diam. Curabitur mollis, lacus vel gravida

*/

?>
-13
rh at richardhoward dot net
19 年前
<?php
/**
实用程序类:用于清理和转义不可信(即用户提供)字符串的静态方法。

任何字符串都可以(通常)被认为处于以下其中一种“模式”中:

pure = 用户实际键入的内容 / 您想要在页面上看到的内容 /
实际存储在数据库中的内容
gpc = 接收的 GET、POST 或 COOKIE 数据
sql = 经过转义,以安全地传递到 RDBMS 中的 SQL(以及来自数据库
查询和文件读取的数据,如果您启用了 magic_quotes_runtime--这
是很少见的)
html = 适用于 HTML 显示(应用了 htmlentities)

始终了解字符串的模式--使用这些方法在模式之间进行转换--将可以防止 SQL 注入和跨站点脚本攻击。

此类引用其自己的命名空间(因此它可以在 PHP 4 中工作--直到 PHP 5 才有 self 关键字)。不要更改类名,除非您更改了
所有内部引用。

示例用法:您想要查询的 POST 值:
$username = Str::gpc2sql($_POST['username']);
*/

// 此处将 SQL 转义设置为使用斜杠;对于 Sybase(/MSSQL) 风格的转义
// ( ' --> '' ),设置为 true。
define('STR_SYBASE', false);

class
Str {
function
gpc2sql($gpc, $maxLength = false)
{
return
Str::pure2sql(Str::gpc2pure($gpc), $maxLength);
}
function
gpc2html($gpc, $maxLength = false)
{
return
Str::pure2html(Str::gpc2pure($gpc), $maxLength);
}
function
gpc2pure($gpc)
{
if (
ini_get('magic_quotes_sybase'))
$pure = str_replace("''", "'", $gpc);
else
$pure = get_magic_quotes_gpc() ? stripslashes($gpc) : $gpc;
return
$pure;
}
function
html2pure($html)
{
return
html_entity_decode($html);
}
function
html2sql($html, $maxLength = false)
{
return
Str::pure2sql(Str::html2pure($html), $maxLength);
}
function
pure2html($pure, $maxLength = false)
{
return
$maxLength ? htmlentities(substr($pure, 0, $maxLength))
:
htmlentities($pure);
}
function
pure2sql($pure, $maxLength = false)
{
if (
$maxLength) $pure = substr($pure, 0, $maxLength);
return (
STR_SYBASE)
?
str_replace("'", "''", $pure)
:
addslashes($pure);
}
function
sql2html($sql, $maxLength = false)
{
$pure = Str::sql2pure($sql);
if (
$maxLength) $pure = substr($pure, 0, $maxLength);
return
Str::pure2html($pure);
}
function
sql2pure($sql)
{
return (
STR_SYBASE)
?
str_replace("''", "'", $sql)
:
stripslashes($sql);
}
}
?>
-15
m
17 年前
关于函数 beginsWith($str, $sub) 的代码,我发现当搜索字符串之后只有一个字符存在时,它存在问题。我发现以下代码效果更好

<?php
function beginsWith($str, $sub) {
return (
strncmp($str, $sub, strlen($sub)) == 0);
}
?>
-17
Pommef
19 年前
示例:给我所有内容,直到“/”的第四次出现。

<?php

$haystack
= "/home/username/www/index.php";
$needle = "/";

function
strnpos($haystack, $needle, $occurance, $pos = 0) {

$res = implode($needle,$haystack);

$res = array_slice($res, $pos, $occurance);

return
explode ($needle,$res);
}
?>
-21
Tomek Rychtyk
12 年前
使用 array_intersect 获取两个字符串的交集

<?php

function string_intersect($string1, $string2)
{
$array1 = $array2 = array();

for(
$i = 0, $j = 0, $s1_len = strlen($string1), $s2_len = strlen($string2);($i < $s1_len) || ($j < $s2_len); $i++, $j++) {
if(
$i < $s1_len) {
$array1[] = $string1[$i];
}
if(
$j < $s2_len) {
$array2[] = $string2[$j];
}
}

return
implode('', array_intersect($array1, $array2));
}

?>

对于更高级的比较,您也可以使用 array_uintersect。
To Top