考虑以下文件(slang.txt):
$#!+ - excrement
$$ - money
$46 - money for snusnu
$h!t - excrement
$xy - sexy
/. - Slashdot
*4u - Kiss for you
*67 - unknown
*eg* - evil grin
07734 - hello
我想将这些术语放入数据库中。为此,我首先必须将文本拆分为已清理的键值对。为此,我将slang.txt的内容复制到php文件:
$string = "$#!+ - excrement
$$ - money
$46 - money for snusnu
$h!t - excrement
$xy - sexy
/. - Slashdot
*4u - Kiss for you
*67 - unknown
*eg* - evil grin
07734 - hello";
$list = explode("\n", $string);
foreach ($list as $item) {
$pair = explode('-', $item);
$result[trim($pair[0])] = trim($pair[1]);
}
print_r($result);
结果几乎就在那里:
Array
(
[$#!+] => excrement
[$$] => money
[$46] => money for snusnu
[!t] => excrement
[] => sexy
[/.] => Slashdot
[*4u] => Kiss for you
[*67] => unknown
[*eg*] => evil grin
[07734] => hello
)
问题:“$”术语(例如$ h!t和$ xy中的$ h)被解释为变量,因此不会复制到数组中,请参阅:[!t] =>狗屎和[] =>性感而不是[$ h!t] =>狗屎和[$ xy] =>性感。我该如何解决这个问题?
P.S。实际文件要大得多,所以我真的无法浏览内容并转义所有$或者其他内容,也不能将字符串放在单个括号之间(因为当有(并且有)时会破坏字符串正在使用的包含一个灾难的词语:)
答案 0 :(得分:5)
使用单引号作为字符串:
$string = '$#!+ - shit
$$ - money
$46 - money for sex
$h!t - shit
$xy - sexy
/. - Slashdot
*4u - Kiss for you
*67 - unknown
*eg* - evil grin
07734 - hello';
您必须在字符串中转义单引号,但这些可能不太常见。如果没有,你将不得不逃脱这一切。
或者更好的解决方案:将此文本存储在单独的文件中,并使用file
或file_get_contents
以字符串形式读入。
答案 1 :(得分:3)
使用NOWDOC会更好,而不仅仅使用单引号。在这种情况下,即使您的字符串包含'
,您也不必进行任何转义 - 并且第一行和最后一行更易于阅读。
$string = <<<'END'
$#!+ - shit
$$ - money
$46 - money for sex
$h!t - shit
$xy - sexy
/. - Slashdot
*4u - Kiss for you
*67 - unknown
*eg* - evil grin
07734 - hello
END;
答案 2 :(得分:2)
直截了当的答案是使用单引号字符串文字(或更方便NOWDOC syntax)。
但是这忽略了这样一个事实:你正在以一种非常迂回的方式来实现这个目标。为什么在
时可以将文件内容移动到PHP变量中$list = file('slang.txt');
$result = array();
foreach ($list as $item) {
$pair = explode('-', $item);
$result[trim($pair[0])] = trim($pair[1]);
}
print_r($result);
如果您认为每次加载外部文件都不合适,那就没问题。 为什么不将数组$result
本身写为文字并节省更多时间?
echo var_export($result); // and copy/paste this into your PHP source
答案 3 :(得分:0)
使用单引号'
而不是双引号"
简单地定义字符串会阻止$
被解释为变量:
$string = '$#!+ - shit
$$ - money
$46 - money for sex
$h!t - shit
$xy - sexy
/. - Slashdot
*4u - Kiss for you
*67 - unknown
*eg* - evil grin
07734 - hello';
或者,您可以反斜杠转义\$
:"\$#!+ -..."