PHP中如何用双引号包裹字符串

7
我试图将用户输入的字符串用双引号括起来进行输出,但我想确保在字符串两侧不会出现双重引号。例如,如果用户发布了 "Hello",我不想将其转换为 ""Hello""。使用以下代码可以轻松实现此操作,但是如果我循环遍历大量字符串,则可能会变慢。
$string = '"'.trim($string,'"').'"';

如果有更好的方法,那就太好了。同样,如果有人可以确认我的方法是可行的,我会很高兴。
谢谢

1
你在哪里使用这个字符串?它是用于HTML、Javascript还是SQL查询的一部分? - Ivan Nevostruev
请确保用户在文本中使用引号时不会被修剪,除非确实需要修剪。 - markus
AND:这是一个引用:“'” - 这是双引号“” - 你稍微用错了这些术语。 - markus
抱歉Tharkun,我的术语不当。我将进行修改。 - Rowan
5个回答

10

如果你的应用程序运行缓慢,且可以追踪到是由于trim语句导致的,则值得关注代码是否运行缓慢。否则,这种情况就不必担心代码运行速度问题。

一个众所周知的编程格言是“过早优化是万恶之源” - 请查看链接的维基百科文章以获取更多信息。


3
仔细考虑所有情况后再确定下一步操作。 (使用[]作为引号以便阅读)
你已经说明了如何处理["Hello"]这种情况,但是对于[I said "Hello", punk]这种情况,你会怎么做?你仍然会删除用户输入的引号吗?还是删除它们?或者更进一步,用单引号替换双引号...但是这样你就必须考虑用户输入包含单引号和双引号的情况!用户输入类似于["Hello](没有结束引号!)这样的“语法错误”文本时怎么办。
确保正确的最佳方法是为您可以想到的每个边缘情况制作一个测试用例,并确保您提出的解决方案实际上符合预期。
如果这个要求的实际原因是[I am taking a user's input at some point and then re-displaying it to them at another point, and don't want to show them stupid looking data like [""data""]], 那么您可能只需要从输入字符串的开头或结尾删除双引号,因为从中间删除会影响用户的预期数据。
如果您的目标仅仅是清楚地区分他们的输入和他们没有输入的文本,请考虑使用其他突出显示的方式,而不是引号。因此,您可以显示[you entered data]或[you entered: data],从而完全避免这个问题。

+1 用例测试,这是一个很好的点,我为自己在答案中错过它感到惭愧... =/ - David Thomas

2

个人建议在输入时去除引号。如果允许输入或存储引号,则始终需要在显示之前使用if/else,以加快速度。

显然,无论您最终选择哪种系统,仍需要对输入数据进行合理性检查。


感谢您的回答,我同意这个观点。但是我现在正在处理的系统是由其他人部分组建的,所以我不得不使用一些可怕的既有数据。不过我最终会对其进行清理! - Rowan

1
我是这样做的:

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

0

在编程中,常见的做法是使用引号来表示引用内部的引用。例如,如果你想让用户输入以下内容:
and she said "hey ho"

你可以将其转换为:
用户: "and she said 'hey ho'"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接