2009-10-12 39 views
6

我试图用双引号输出用户输入的字符串来输出,但是我想确保在字符串的任何一边都没有双引号。例如,如果用户帖子PHP用双引号括起一个字符串

“你好”

我不想把它变成

“” 你好 “”

我可以使用下面的代码很容易做到这一点,但我担心如果我循环大量字符串,这可能会变得缓慢。

$string = '"'.trim($string,'"').'"'; 

如果有人有更好的方式做到这一点,那会很棒。同样,如果有人能证实我的方式没问题,我会很高兴。

谢谢

+1

你在哪里使用这个字符串?是HTML,Javascript还是部分SQL查询? – 2009-10-12 16:15:26

+0

只要确保没有任何用户在文本中使用引号的情况下,这些引号也会被剪裁,但也许不应该是这样。 – markus 2009-10-12 16:17:17

+0

AND:这是一个引用:''' - 这是一个双引号''' - 你正在使用这些术语有点错误 – markus 2009-10-12 16:18:23

回答

10

这正是我如何解决这个问题。如果您的应用程序运行速度缓慢,则只需要担心代码速度缓慢,并且可以将其跟踪到修剪语句。

一个众所周知的编程报价是“Premature Optimisation是万恶之源” - 请参阅维基百科的文章链接了解更多。

+0

好文章,谢谢 – Rowan 2009-10-12 16:16:55

2

就个人而言,我会建议剥离输入引号。为了加快速度,如果您允许输入或存储报价,则在显示报价之前,您总会被禁止使用if/else

显然,您仍然需要对输入数据执行完整性检查,而不管最终结果如何。

+0

感谢您的回答,我同意,但我正在研究的系统部分由其他人部署在一起,所以我必须与可怕的现有数据一起工作..我将最终消毒这一切! – Rowan 2009-10-12 16:18:18

0

它是用引号报价中表示报价,如果你想让你的用户编写常见的做法:
,她说:“嘿嗬”

,你可能会变成:
用户:“她说'嘿嘿'”

3

请仔细考虑所有情况应该发生什么。 (使用[]作为报价以提高可读性)

你说过你对[[你好]]所做的事情,但你对[我说“你好,朋克]做什么?您是否仍然删除用户输入的引号,还是删除它们?或者,也许更进一步,用双引号替换单引号......但是,您必须考虑用户输入包含单引号和双引号的情况!当用户输入“语法错误”的文字时,如何输入“你好”(无结束语!)

确保你做得对的最好方法是为每个边缘案例做一个测试用例,并确保您提出的解决方案实际上符合预期。

如果这个要求的真正原因是[我在某个时间点接受用户的输入,然后在另一个点重新显示给他们,并且不想让他们看到像[“”数据那样愚蠢的数据“”]],你可能只想从输入字符串的开头或结尾删除双引号,因为它们是从用户想要的数据中删除它们。

如果您的目标仅仅是明确区分他们的输入和他们没有输入的文本,请考虑使用其他方式突出显示,而不是使用引号。因此,您可以显示[您输入的数据]或[您输入的数据],而不是[您输入“数据”],这样可以完全避免此问题。

+0

+1用例测试,我很惭愧地错过了我自己的答案...... = / – 2009-10-12 18:53:26

0

我就是这么做的:

function quotize(&$string) 
{ 
    if (empty($string) || is_null($string)) { 
     return; 
    } 

    $char = '"'; 
    if ($string[0] != $char) { 
     $string = $char . $string; 
    } 

    if (substr($string, -1) != $char) { 
     $string .= $char; 
    } 

    return; 
} 
相关问题