【问题标题】:PHP Wrap a string in double quotesPHP 将字符串用双引号括起来
【发布时间】:2017-05-24 08:58:54
【问题描述】:

我正在尝试将用户输入的字符串用双引号括起来以进行输出,但我想确保我不会在字符串的任一侧使用双双引号。例如,如果用户发布

“你好”

我不想把它变成

""你好""

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

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

如果有人有更好的方法来做到这一点,那就太好了。同样,如果有人能确认我的方式没问题,我会很高兴。

谢谢

【问题讨论】:

  • 你在哪里使用这个字符串?是 HTML、Javascript 还是部分 SQL 查询?
  • 只要确保没有用户在文本中使用引号的情况,这些引号也会被修剪,但可能不应该这样做。
  • AND:这是一个引号:' - 这是一个双引号 " - 你使用这些术语有点错误。
  • 对不起,tharkun - 我的术语不好。我会修改

标签: php optimization string


【解决方案1】:

这正是我要解决这个问题的方法。仅当您遇到应用程序运行缓慢的问题时才值得担心代码运行缓慢,您可以将其追溯到 trim 语句。

一个众所周知的编程名言是“Premature Optimisation 是万恶之源”——有关更多信息,请参阅链接的维基百科文章。

【讨论】:

    【解决方案2】:

    仔细考虑所有情况下会发生什么。 (使用 [] 作为引号以提高可读性)

    你说过你为 ["Hello"] 做了什么,但你为 [I said "Hello", punk] 做了什么?您仍然删除用户输入的引号,还是删除它们?或者可能更进一步,用单引号代替双引号......但是您必须考虑用户输入同时包含单引号和双引号的情况!当用户输入像 ["Hello] (没有结束引号!)这样的“语法错误”文本时会怎样。

    确保您做对的最佳方法是为您能想到的每个边缘案例制作一个测试案例,并确保您提出的解决方案确实符合预期。

    如果此要求的实际原因是 [我在某个时间点获取用户的输入,然后在另一个时间点将其重新显示给他们,并且不想向他们显示看起来很愚蠢的数据,例如 [""data" "]],您可能只想从输入字符串的开头或结尾删除双引号,因为使用用户的预期数据将它们从中间螺丝上剥离。

    如果您的目标只是清楚地区分他们的输入和他们未输入的文本,请考虑使用其他突出显示的方式而不是引号。因此,您可以显示 [you entered data] 或 [you enter: data] 而不是 [you enter "data"],这完全避免了这个问题。

    【讨论】:

    • +1 用于用例测试,我很惭愧在自己的答案中错过了这一点... =/
    【解决方案3】:

    就个人而言,我建议在输入时去掉引号。至于让它更快,如果你允许输入或存储引号,你总是会在显示它们之前使用if/else

    显然,无论最终使用何种系统,您仍然需要对输入数据执行完整性检查。

    【讨论】:

    • 感谢您的回答,我同意,但我正在开发的系统部分是由其他人组装的,所以我必须处理可怕的现有数据。我最终会全部清理!
    【解决方案4】:

    我是这样做的:

    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;
    }
    

    【讨论】:

      【解决方案5】:

      如果您想让您的用户写下,通常使用引号来表示引用中的引用:
      她说“嘿嘿”

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-11
        • 1970-01-01
        • 1970-01-01
        • 2014-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多