我尝试过很多方法,有些是部分工作,有些根本不工作。这一个根本不起作用,因为while条件由于某种原因一直返回false,它不会开始替换。 我基本上想要的是我放入一个字符串,然后我搜索一个单词并用另一个单词替换它。我设法做到这一点,唯一的问题是没有替换单词,如果它是从字符串的第0个位置开始,它仍然回显字符串中的第0个字母并继续使用新单词。例如。 :“老了”,我想用新的替换旧的,它会回应“onew is new”。 请告诉我,我是否应该做任何不同的事情,以便有一个更干净和完美优化的代码来加速网站。 谢谢。
<?php
$offset = 0;
if (isset($_POST['user_input']) && !empty ($_POST['user_input'])) {
$initial_string = $_POST['user_input'];
$string_length = strlen($initial_string);
$new_string = $initial_string;
if (isset($_POST['search_input']) && !empty ($_POST['search_input'])) {
$search_input = $_POST['search_input'];
$search_input_length = strlen($search_input);
} else {
echo 'Please write the string that you want to replace into the Search input'.'<br>'.PHP_EOL;
}
if (isset($_POST['replace_input']) && !empty ($_POST['replace_input'])) {
$replace_input = $_POST['replace_input'];
$replace_input_length = strlen($replace_input);
} else {
echo 'Please write the string that you want to switch to into the Replace input'.'<br>'.PHP_EOL;
}
while (strpos($new_string,$search_input,$offset) === true) {
$strpos = strpos($new_string,$search_input,$offset);
if ($offset<$string_length) {
$new_string = substr_replace($new_string,$replace_input,$strpos,$search_input_length);
$offset = $offset + $replace_input_length;
} else {
break;
}
}
}
echo $new_string;
?>
<hr>
<form action="index.php" method="POST">
<textarea name="user_input" rows="7" cols="30"></textarea><Br>
Search: <input type="value" name="search_input"><br>
Replace: <input type="value" name="replace_input"><br>
<input type="submit" value="submit">
</form>
答案 0 :(得分:1)
您的代码有很多问题。这些是需要注意的重要事项:
isset($var) && !empty($var)
是多余的。 empty($var)
还检查变量是否已设置,如果不是则返回true。只需!empty($var)
即可。
您正在检查strpos()
是否返回布尔值true
。 strpos()
永远不会返回true
。它要么在大海捞针中返回针的位置,要么在大海捞针中找不到针时false
。
更改while
条件以检查strpos()
是否返回非假值(匹配 时是这种情况):
while (strpos($new_string, $search_input, $offset) !== false)
{
$strpos = strpos($new_string, $search_input, $offset);
if ($offset < $string_length)
{
$new_string = substr_replace($new_string, $replace_input, $strpos, $search_input_length);
$offset = $offset + $replace_input_length;
}
else
{
break;
}
}
这应该正确输出:
new is new
您当前的代码似乎不必要地复杂化。基本上,您只是尝试将所有替换为字符串中子字符串的出现。这正是str_replace()
的作用。请改用该功能。然后,您的代码可以简化为:
if (validation goes here) {
$new_string = str_replace($search_input, $replace_input, $new_string);
}
答案 1 :(得分:0)
如果我理解你想用另一个子串替换给定子串(在一个更大的字符串内)的所有出现。
为此,您只需使用str_replace
http://www.php.net/manual/en/function.str-replace.php
用
替换while
循环
$new_string = str_replace( $search_input, $replace_input, $initial_string );
答案 2 :(得分:0)
我可能不会完全理解你想要做什么,但似乎有点过于复杂。为什么不在整个user_input上运行单个str_replace?
if (!empty($_POST['user_input'] && !empty ($_POST['search_input'] && !empty ($_POST['replace_input'])) {
$str = str_replace($_POST['search_input'], $_POST['replace_input'], $_POST['user_input']);
die(var_dump($str));
} else {
die('error');
}