Pergunta

Tenho lutado para substituir uma barra de barriga por outro símbolo como '.-'. Apenas para indicar a posição das barras de barriga, pois eu não pude enviar uma string como 'C xampp etc.' Através do URL como variável, então pensei em substituir primeiro as barras de barriga nessa string por outro símbolo, depois enviaria o URL e depois substituí -las de volta às barras de barriga no arquivo php que o manipula. Embora haja uma maneira melhor de enviar essas cordas através do URL? Porque quando tento um script como:

$tmp_name = preg_replace("\", ".-.", $_FILES['uploadfile']['tmp_name']);

Isso se transforma em um erro de PHP, pois também é usado como delimitador.

Alguém poderia me ajudar nisso?

Desde já, obrigado!

Aliás, se eu pudesse enviar uma matriz completa através do URL, todo esse problema seria resolvido, mas não acho que seja possível?

Foi útil?

Solução

O regex usado em preg_replace deve ser fechado em um par de delimitador e também tentar usar \\\ ao invés de \ Como:

$tmp_name = preg_replace("{\\\}", ".-.", $_FILES['uploadfile']['tmp_name']);

EDITAR:

Para reverter a substituição que você pode fazer:

$str = preg_replace('{\.-\.}',"\\",$str);

Você precisa escapar do . Para combinar com um ponto literal.

Outras dicas

usar urlencode()/urldecode().

echo urlencode('C:\xampp\etc'); // C%3A%5Cxampp%5Cetc

BTW: Isso soa como uma enorme falha de segurança (enviando caminhos absolutos por solicitação)


PS: preg_replace() é para expressões regulares. Tentar str_replace() próxima vez.

Aliás, se eu pudesse enviar uma matriz completa através do URL, todo esse problema seria resolvido, mas não acho que seja possível?

Isso é fácil. PHP:

$url = 'http://example.com/?array=' . urlencode(serialize($array)); // html
$array = unserialize($_GET['array']); // server side

Ou javascript:

url = "http://example.com/?array=" + encodeURIComponent(JSON.stringify(array)); // client
$array = json_decode($_GET['array']); // server

(Para JavaScript, você terá que procurar se o Encodeuricomponent está correto e também precisará da biblioteca JSON oficial)

Se você não está usando uma expressão regular (o que não está), você deve usar str_replace em vez de:

$tmp_name = str_replace('\\', '.-.', $_FILES['...']);

Observe que você tem que escapar do \ com outro \ (caso contrário, escaparia o seguinte ').

Quanto ao erro delimitador - expressões regulares precisam ser fechadas em delírios, por exemplo /foo/ (/ é o delimitador, foo é o padrão). Mas, novamente, não há necessidade de você usar ou se preocupar com regexps

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top