在Php中,如何限制字符串不损害HTML代码?

在Php中,如何限制字符串不损害HTML代码?,php,html,Php,Html,我有个大问题。我必须剪切一个由HTML代码组成的字符串。但我不知道如何才能使HTML代码不受损坏: <p>this is a <strong>HTML</strong> code which is too long, and can be even UNICODE characters</p> 这是一个HTML代码,太长,甚至可以是UNICODE字符 使用mb_substr(): 这是一个HTM 有办法解决吗?您必须解析字符串。我会使用正则表

我有个大问题。我必须剪切一个由HTML代码组成的字符串。但我不知道如何才能使HTML代码不受损坏:

<p>this is a <strong>HTML</strong> code which is too long, and can be even UNICODE characters</p>
这是一个HTML代码,太长,甚至可以是UNICODE字符

使用mb_substr():

这是一个HTM

有办法解决吗?

您必须解析字符串。我会使用正则表达式进行拆分,然后剪切字符串(计算没有标记的字符数),然后再次添加closetags

请尝试在10个字符后剪切,并仅适用于第一次出现:

$cut_after = 10;
$string_complete = "<b>Peter Griffin</b>";
$string_to_cut   = filter_var($string_complete, FILTER_SANITIZE_STRING);
var_dump($string_complete);
//string '<b>Peter Griffin</b>' (length=20)

$string_chopped_head = substr($string_to_cut, 0, $cut_after);
$string_chopped_tail = substr($string_to_cut, $cut_after, (strlen($string_to_cut)-$cut_after));
$string_head_before_cut = substr($string_complete, 0, stripos($string_complete, $string_chopped_head));
$string_tail_after_cut = substr($string_complete, stripos($string_complete, $string_chopped_tail)+strlen($string_chopped_tail));

$final_string = $string_head_before_cut . $string_chopped_head . $string_tail_after_cut;
var_dump($final_string);
//string '<b>Peter Grif</b>' (length=17)
$cut\u后=10;
$string_complete=“Peter Griffin”;
$string\u to\u cut=filter\u var($string\u complete,filter\u SANITIZE\u string);
变量转储($string\u complete);
//字符串“Peter Griffin”(长度=20)
$string\u chopped\u head=substr($string\u to\u cut,0,$cut\u after);
$string_chupped_tail=substr($string_to_cut,$cut_after,(strlen($string_to_cut)-$cut_after));
$string_head_before_cut=substr($string_complete,0,stripos($string_complete,$string_chopped_head));
切割后的$string_tail_=substr($string_complete,stripos($string_complete,$string_chupped_tail)+strlen($string_chupped_tail));
$final\u string=$string\u head\u切割前$绳子切碎了你的头$切割后的串尾;
变量转储(最终字符串);
//字符串“Peter Grif”(长度=17)

您必须解析字符串。我会使用正则表达式进行拆分,然后剪切字符串(计算没有标记的字符数),然后再次添加closetags

请尝试在10个字符后剪切,并仅适用于第一次出现:

$cut_after = 10;
$string_complete = "<b>Peter Griffin</b>";
$string_to_cut   = filter_var($string_complete, FILTER_SANITIZE_STRING);
var_dump($string_complete);
//string '<b>Peter Griffin</b>' (length=20)

$string_chopped_head = substr($string_to_cut, 0, $cut_after);
$string_chopped_tail = substr($string_to_cut, $cut_after, (strlen($string_to_cut)-$cut_after));
$string_head_before_cut = substr($string_complete, 0, stripos($string_complete, $string_chopped_head));
$string_tail_after_cut = substr($string_complete, stripos($string_complete, $string_chopped_tail)+strlen($string_chopped_tail));

$final_string = $string_head_before_cut . $string_chopped_head . $string_tail_after_cut;
var_dump($final_string);
//string '<b>Peter Grif</b>' (length=17)
$cut\u后=10;
$string_complete=“Peter Griffin”;
$string\u to\u cut=filter\u var($string\u complete,filter\u SANITIZE\u string);
变量转储($string\u complete);
//字符串“Peter Griffin”(长度=20)
$string\u chopped\u head=substr($string\u to\u cut,0,$cut\u after);
$string_chupped_tail=substr($string_to_cut,$cut_after,(strlen($string_to_cut)-$cut_after));
$string_head_before_cut=substr($string_complete,0,stripos($string_complete,$string_chopped_head));
切割后的$string_tail_=substr($string_complete,stripos($string_complete,$string_chupped_tail)+strlen($string_chupped_tail));
$final\u string=$string\u head\u切割前$绳子切碎了你的头$切割后的串尾;
变量转储(最终字符串);
//字符串“Peter Grif”(长度=17)

您必须解析字符串。我会使用正则表达式进行拆分,然后剪切字符串(计算没有标记的字符数),然后再次添加closetags

请尝试在10个字符后剪切,并仅适用于第一次出现:

$cut_after = 10;
$string_complete = "<b>Peter Griffin</b>";
$string_to_cut   = filter_var($string_complete, FILTER_SANITIZE_STRING);
var_dump($string_complete);
//string '<b>Peter Griffin</b>' (length=20)

$string_chopped_head = substr($string_to_cut, 0, $cut_after);
$string_chopped_tail = substr($string_to_cut, $cut_after, (strlen($string_to_cut)-$cut_after));
$string_head_before_cut = substr($string_complete, 0, stripos($string_complete, $string_chopped_head));
$string_tail_after_cut = substr($string_complete, stripos($string_complete, $string_chopped_tail)+strlen($string_chopped_tail));

$final_string = $string_head_before_cut . $string_chopped_head . $string_tail_after_cut;
var_dump($final_string);
//string '<b>Peter Grif</b>' (length=17)
$cut\u后=10;
$string_complete=“Peter Griffin”;
$string\u to\u cut=filter\u var($string\u complete,filter\u SANITIZE\u string);
变量转储($string\u complete);
//字符串“Peter Griffin”(长度=20)
$string\u chopped\u head=substr($string\u to\u cut,0,$cut\u after);
$string_chupped_tail=substr($string_to_cut,$cut_after,(strlen($string_to_cut)-$cut_after));
$string_head_before_cut=substr($string_complete,0,stripos($string_complete,$string_chopped_head));
切割后的$string_tail_=substr($string_complete,stripos($string_complete,$string_chupped_tail)+strlen($string_chupped_tail));
$final\u string=$string\u head\u切割前$绳子切碎了你的头$切割后的串尾;
变量转储(最终字符串);
//字符串“Peter Grif”(长度=17)

您必须解析字符串。我会使用正则表达式进行拆分,然后剪切字符串(计算没有标记的字符数),然后再次添加closetags

请尝试在10个字符后剪切,并仅适用于第一次出现:

$cut_after = 10;
$string_complete = "<b>Peter Griffin</b>";
$string_to_cut   = filter_var($string_complete, FILTER_SANITIZE_STRING);
var_dump($string_complete);
//string '<b>Peter Griffin</b>' (length=20)

$string_chopped_head = substr($string_to_cut, 0, $cut_after);
$string_chopped_tail = substr($string_to_cut, $cut_after, (strlen($string_to_cut)-$cut_after));
$string_head_before_cut = substr($string_complete, 0, stripos($string_complete, $string_chopped_head));
$string_tail_after_cut = substr($string_complete, stripos($string_complete, $string_chopped_tail)+strlen($string_chopped_tail));

$final_string = $string_head_before_cut . $string_chopped_head . $string_tail_after_cut;
var_dump($final_string);
//string '<b>Peter Grif</b>' (length=17)
$cut\u后=10;
$string_complete=“Peter Griffin”;
$string\u to\u cut=filter\u var($string\u complete,filter\u SANITIZE\u string);
变量转储($string\u complete);
//字符串“Peter Griffin”(长度=20)
$string\u chopped\u head=substr($string\u to\u cut,0,$cut\u after);
$string_chupped_tail=substr($string_to_cut,$cut_after,(strlen($string_to_cut)-$cut_after));
$string_head_before_cut=substr($string_complete,0,stripos($string_complete,$string_chopped_head));
切割后的$string_tail_=substr($string_complete,stripos($string_complete,$string_chupped_tail)+strlen($string_chupped_tail));
$final\u string=$string\u head\u切割前$绳子切碎了你的头$切割后的串尾;
变量转储(最终字符串);
//字符串“Peter Grif”(长度=17)


这些是你可以用来解决这个问题的工具:找到标签的位置,
strlen($string)
计算字符串的长度,并得到字符串的片段。

这些是你可以用来解决这个问题的工具:找到标签的位置,
strlen($string)
来计算字符串的长度,并得到字符串的片段。

这些工具可以用来解决这个问题:要找到标签的位置,
strlen($string)
来计算字符串的长度,这些工具可以用来解决这个问题:找到标签的位置,
strlen($string)
计算字符串的长度,并获取字符串的片段。

使用filter\u SANITIZE\u string在剪切前过滤字符串

使用filter\u SANITIZE\u string在剪切前过滤字符串

使用filter\u SANITIZE\u string在剪切前过滤字符串

使用filter\u SANITIZE\u string

使用
strip_标签
请参见,然后使用
substr
这不能以确定的方式完成。您可以使用诸如
simple\u html\u dom
之类的库来迭代剪切并检查较短的字符串是否仍然是有效的html。除此之外,您应该首先限制字符串长度,以后不要缩短它。:)函数
strip\u tags
无法使用,因为他需要“HTML代码不会损坏”。@John Smith,问题是
为什么要剪切它?
。因为如果它只是一个te的预览