Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用其他变量创建PHP字符串…手动工作,可以';我不知道如何自动_Php_String_Variables_Mysql - Fatal编程技术网

使用其他变量创建PHP字符串…手动工作,可以';我不知道如何自动

使用其他变量创建PHP字符串…手动工作,可以';我不知道如何自动,php,string,variables,mysql,Php,String,Variables,Mysql,我试图使用从mysql数据库中提取的数据自动生成一个变量。我知道数据是以某种类似于原始形式的形式从数据库中提取出来的,但这些数据的行为与手动键入并分配给字符串的数据不同 例如,如果mysql表中的单元格显示 I said "goodbye" before I left. She also said "goodbye." …我手动复制/粘贴它并添加必要的转义 $string1 = " I said \"goodbye\" before I left. She also said \"goodb

我试图使用从mysql数据库中提取的数据自动生成一个变量。我知道数据是以某种类似于原始形式的形式从数据库中提取出来的,但这些数据的行为与手动键入并分配给字符串的数据不同

例如,如果mysql表中的单元格显示

I said "goodbye" before I left.
She also said "goodbye."
…我手动复制/粘贴它并添加必要的转义

$string1 = 
"
I said \"goodbye\" before I left.
She also said \"goodbye.\"
";
…这不等于

$string1 = $mysqlResultArray['specificCellWithQuoteShownAbove']
有趣的是,如果我回显$string1的两个版本并查看输出,它们看起来完全相同。但在我创建的各种功能中,它们的功能并不相同。这些函数只有在我使用手动复制/粘贴方法时才起作用——显然,这不是我想要的

我不确定这是否与断线或逃逸有关,或者两者的某种结合。但是,虽然这两个字符串表面上是相同的,但它们在功能上显然是不同的,我不知道为什么


那么,我如何创建$string1而不必手动复制/粘贴mysql条目中的内容,而是查询数据并将其分配给$string1,从而使其在功能上完全等同于手动复制/粘贴的字符串?

您似乎在
$string1
的开头和结尾处有换行符。将该部分更改为以下内容:

$string1 = "I said \"goodbye\" before I left.
She also said \"goodbye.\"";
var_dump($string1);
你应该冷静点

此外,请尝试以下操作:

$string1 = "I said \"goodbye\" before I left.
She also said \"goodbye.\"";
var_dump($string1);

与echo或print不同,它将包含字符串分隔符,因此您可以更容易地看到字符串之间的差异。

应该可以工作,但无法从这里诊断问题。请尝试使用
然后尝试使用strstr(mystr,strmysql)找出字符串的哪个部分是匹配的,这将帮助您解决问题

您的字符串不相同。你认为他们是,但他们不是。下面是一个快速而肮脏的程序,它将运行两个字符串并逐个字符进行比较,突出显示任何差异。将此代码添加到项目中,并用您认为相同但不相同的两个字符串替换
$first\u string
$second\u string
function output_chrs($i,$chr_1, $chr_2)
{
    echo $i . '.' . $chr_1, '|', $chr_2;
    if($chr_1 === $chr_2)
    {
        echo "\n";
    }
    else
    {
        echo " <---- difference detected\n";
    }
    return; 
}

function chr_by_chr($string_1, $string_2, $output_method)
{
    if(strlen($string_2) < strlen($string_1))
    {
        $string_2 = str_pad($string_2, strlen($string_1), ' ');
    }
    for($i=0;$i<strlen($string_1);$i++)
    {
        call_user_func($output_method, $i, $string_1[$i], $string_2[$i]);
    }

    if(strlen($string_2) > strlen($string_1))
    {
        for($i=$i;$i<strlen($string_2);$i++)
        {
            call_user_func($output_method, $i, $string_1[$i], $string_2[$i]);
        }
    }
    return;
}

$first_string  =  'foobazbar';
$second_string =  'fora';
$output_method = 'output_chrs';

ob_start();
$results = chr_by_chr($first_string,$second_string,$output_method); 
echo "\n";
$results = chr_by_chr($first_string,$second_string,'output_ords');  

$results = ob_get_clean();
if(isset($argv))
{
    echo $results;
}
else
{
    echo nl2br($results);
}
函数输出\u chrs($i,$chr\u 1,$chr\u 2)
{
回声$i.'..$chr_1'.|',$chr_2;
如果($chr_1===$chr_2)
{
回音“\n”;
}
其他的
{

echo“我确实试过了。不幸的是,这对我的工作没有什么影响。但我怀疑换行符(可能是换行符存储在字符串中的方式?)因为我正在处理的数据有很多换行符。但是开始换行符和结束换行符似乎没有什么区别。还没有尝试var_dump。现在让我试试。另外,在进一步深入之前,一个不错的健全性检查是轮询
strlen($str)
这两个字符串。如果它们不同,那么您实际上在处理不同的字符串,通过
$str[$i]
进行简单的手动检查将很快找到问题字符(可能只是因为CR问题或其他原因)。如果它们是相同的,你可能正在处理某种编码混乱之类的问题,我们可以更深入地挖掘。实际上,当我进行var_转储时,它会在转储的开头显示字符数。而且数字上肯定存在差异。我现在正在扫描,以找出可能的位置,因为这两个看起来是v事实上是一样的。虽然我注意到一些间距和换行的差异…我很快会回来报告…好的,即使在确保自动生成的变量和手动生成的变量完全相同之后,问题仍然存在。只有手动创建的一个有效。我完全被难住了。你问题中的语法很有趣。你有一个太多了第二个代码块中的双引号。第三个代码块也是一个赋值,而不是一个比较。我很确定这在你的代码中做得更谨慎,但你永远也不能太确定。史蒂文,双引号在这里是一个拼写错误,而不是在我的代码中。修复如上:)而赋值就是这样的;我试图说明的是t如果$string1是手动输入的,它将正确地运行我的函数。但是如果我将数组元素分配给$string1(并且所述元素完全相同),函数运行不正常。Alan,29.m | m 30。|回车是不同的。一个有回车,另一个没有回车。有效的一个没有回车。让我修复并重试。这确实是问题所在。从纯文本源复制/粘贴不会粘贴回车,而它们是由mysql | U查询获取的。因此,我在输入函数之前,我已经从字符串中删除了所有ascii#13。感谢您的帮助。我只是想表达我对Alan的解决方案的感激之情-这里的高水平钓鱼教学:)问题是回车符。这就是区别。删除了回车符-问题已修复。谢谢。